LoginSignup
1
3

More than 3 years have passed since last update.

laravel-adminの設定をエクスポートしてseederに追加する方法

Posted at

laravel-adminのMenu設定をエクスポートして、seederに追加することで初期Migration時にデータを戻す方法を考えました。

laravel-adminのメニューやロールの初期設定を開発画面で作っておいて別環境で再現するなど。

admin:export-seedではMenuやRoleの情報しかExportされない

php artisan admin:export-seed
Admin tables seed file was created: /database/seeds/AdminTablesSeeder.php
Use: php artisan db:seed --class=AdminTablesSeeder

上記のコマンドで設定が全部エクスポートされたよわーい!と思ってdb:seedしても、管理画面にログインできない。どうやらこのエクスポートされたSeederを見る限り、ユーザー情報が含まれていないように見える。

admin useraのseederは別で作らないといけないようだ。。。

こちらの記事を参考にlaravel-admin初期設定のSeederをコピーします。

ファイル名をクラス名をAdminUsersSeederに変更して、// create a user.〜role部分だけ使って以下のように修正。

AdminUsersSeeder
<?php

use Illuminate\Database\Seeder;
use Encore\Admin\Auth\Database\Administrator;
use Encore\Admin\Auth\Database\Role;
use Encore\Admin\Auth\Database\Permission;

class AdminUsersSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // create a user.
        Administrator::truncate();
        Administrator::create([
            'username' => 'admin',
            'password' => bcrypt('admin'),
            'name'     => 'Administrator',
        ]);

        // create a role.
        Role::truncate();
        Role::create([
            'name' => 'Administrator',
            'slug' => 'administrator',
        ]);

        // add role to user.
        Administrator::first()->roles()->save(Role::first());

        // 別のユーザー(例:staff)やロールを初期状態で追加しておく場合
        Administrator::create([
            'username' => 'staff',
            'password' => bcrypt('staff'),
            'name'     => 'staff',
        ]);

        // create a role.
        Role::create([
            'name' => 'staff',
            'slug' => 'staff',
        ]);

        // add role to user.
        Administrator::find(2)->roles()->save(Role::find(2));



    }
}

AdminUsersSeeder, AdminTablesSeederをDatabaseSeederに追加。

    public function run()
    {
        $this->call(AdminUsersSeeder::class);
        $this->call(AdminTablesSeeder::class);
    }

これで、admin/adminでログインできる初期ユーザーと、GUIで設定したmenu,role,permisson情報がシーダーにエクスポートされました。

php artisan migrate:fresh
php artisan db:seed

上記のコマンドを実行して、ユーザーとメニューが戻ることを確認。

以後、メニューや権限を編集した場合は、再度

php artisan admin:export-seed

で、設定がSeederにエクスポートされます。
ユーザーを追加した場合は?手動でファイルに追記してください・・・

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3