From d4548ca97e775ba110fa521263abdab00ccc211a Mon Sep 17 00:00:00 2001 From: Geriano Date: Sat, 16 Jul 2022 03:02:39 +0700 Subject: [PATCH] create menu model, migration, factory, and seeder --- app/Models/Menu.php | 66 +++++++++++++++++++ database/factories/MenuFactory.php | 23 +++++++ .../2022_07_15_193003_create_menus_table.php | 50 ++++++++++++++ ...15_193322_create_menu_permission_table.php | 37 +++++++++++ ...22_07_15_193331_create_menu_role_table.php | 37 +++++++++++ database/seeders/MenuSeeder.php | 19 ++++++ 6 files changed, 232 insertions(+) create mode 100644 app/Models/Menu.php create mode 100644 database/factories/MenuFactory.php create mode 100644 database/migrations/2022_07_15_193003_create_menus_table.php create mode 100644 database/migrations/2022_07_15_193322_create_menu_permission_table.php create mode 100644 database/migrations/2022_07_15_193331_create_menu_role_table.php create mode 100644 database/seeders/MenuSeeder.php diff --git a/app/Models/Menu.php b/app/Models/Menu.php new file mode 100644 index 0000000..2cfd99b --- /dev/null +++ b/app/Models/Menu.php @@ -0,0 +1,66 @@ +hasOne(static::class, 'id', 'parent_id'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function childs() + { + return $this->hasMany(static::class, 'parent_id', 'id') + ->with('childs') + ->orderBy('position'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ + public function permissions() + { + return $this->belongsToMany(Permission::class); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ + public function roles() + { + return $this->belongsToMany(Role::class); + } +} diff --git a/database/factories/MenuFactory.php b/database/factories/MenuFactory.php new file mode 100644 index 0000000..a5dcfd1 --- /dev/null +++ b/database/factories/MenuFactory.php @@ -0,0 +1,23 @@ + + */ +class MenuFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + // + ]; + } +} diff --git a/database/migrations/2022_07_15_193003_create_menus_table.php b/database/migrations/2022_07_15_193003_create_menus_table.php new file mode 100644 index 0000000..49fed3d --- /dev/null +++ b/database/migrations/2022_07_15_193003_create_menus_table.php @@ -0,0 +1,50 @@ +id(); + $table->unsignedBigInteger('parent_id') + ->nullable() + ->default(null); + $table->string('name'); + $table->string('route_or_url')->default('#'); + $table->string('icon') + ->default('circle'); + $table->boolean('enable') + ->default(true); + $table->integer('position'); + $table->json('actives') + ->default('[]'); + $table->boolean('deleteable') + ->default(true); + $table->timestamps(); + + $table->foreign('parent_id') + ->references('id') + ->on('menus') + ->cascadeOnDelete(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('menus'); + } +}; diff --git a/database/migrations/2022_07_15_193322_create_menu_permission_table.php b/database/migrations/2022_07_15_193322_create_menu_permission_table.php new file mode 100644 index 0000000..b1bcb42 --- /dev/null +++ b/database/migrations/2022_07_15_193322_create_menu_permission_table.php @@ -0,0 +1,37 @@ +id(); + $table->foreignId('menu_id') + ->constrained() + ->cascadeOnDelete(); + $table->foreignId('permission_id') + ->constrained() + ->cascadeOnDelete(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('menu_permission'); + } +}; diff --git a/database/migrations/2022_07_15_193331_create_menu_role_table.php b/database/migrations/2022_07_15_193331_create_menu_role_table.php new file mode 100644 index 0000000..2d5f9e0 --- /dev/null +++ b/database/migrations/2022_07_15_193331_create_menu_role_table.php @@ -0,0 +1,37 @@ +id(); + $table->foreignId('menu_id') + ->constrained() + ->cascadeOnDelete(); + $table->foreignId('permission_id') + ->constrained() + ->cascadeOnDelete(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('menu_role'); + } +}; diff --git a/database/seeders/MenuSeeder.php b/database/seeders/MenuSeeder.php new file mode 100644 index 0000000..6f3b296 --- /dev/null +++ b/database/seeders/MenuSeeder.php @@ -0,0 +1,19 @@ +