2

私はlaravel 5.2マルチ認証を使用しているので、ユーザーテーブルの代わりに新しい管理テーブルを作成しました。

役割と権限のために Entrust をインストールしました。entrust のインストール中に、entrust:migration の内容を次のように変更しました。

public function up()
{
    // Create table for storing roles
    Schema::create('roles', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->unique();
        $table->string('display_name')->nullable();
        $table->string('description')->nullable();
        $table->timestamps();
    });

    // Create table for associating roles to users (Many-to-Many)
    Schema::create('role_management', function (Blueprint $table) {
        $table->integer('management_id')->unsigned();
        $table->integer('role_id')->unsigned();

        $table->foreign('management_id')->references('id')->on('managements')
            ->onUpdate('cascade')->onDelete('cascade');
        $table->foreign('role_id')->references('id')->on('roles')
            ->onUpdate('cascade')->onDelete('cascade');

        $table->primary(['management_id', 'role_id']);
    });

    // Create table for storing permissions
    Schema::create('permissions', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->unique();
        $table->string('display_name')->nullable();
        $table->string('description')->nullable();
        $table->timestamps();
    });

    // Create table for associating permissions to roles (Many-to-Many)
    Schema::create('permission_role', function (Blueprint $table) {
        $table->integer('permission_id')->unsigned();
        $table->integer('role_id')->unsigned();

        $table->foreign('permission_id')->references('id')->on('permissions')
            ->onUpdate('cascade')->onDelete('cascade');
        $table->foreign('role_id')->references('id')->on('roles')
            ->onUpdate('cascade')->onDelete('cascade');

        $table->primary(['permission_id', 'role_id']);
    });
}

そしてentrust.php次のように:

return [
'role' => 'App\Role',
'roles_table' => 'roles',
'permission' => 'App\Permission',
'role_user_table' => 'role_management',
];

役割と権限と管理の 3 つのモデルがあります。role_managementすべて正常に動作しますが、問題は、以下のコードを使用してロールをテーブルにアタッチしたい場合です。

public function store(userManagementFormRequest $request)
{
    $user=new Management(array(
        'name'=>$request->get('name'),
        'password'=>bcrypt($request->get('password')),
    ));
    $user->save();
    $user->attachRoles($_POST['role']);
    return redirect()->back()->with('userStatus','عملیات با موفقیت انجام گردید.');
}

エラーが表示されます:

management_roleSQLSTATE [42S02]: ベース テーブルまたはビューが見つかりません: 1146 テーブル 'digikala.management_role' が存在しません (SQL: ( created_at、、、 ) 値management_idに挿入します (2016-03-21 14:26:24、1、1 role_idupdated_at2016-03-21 14:26:24)))

management_roleの代わりに表示される理由がわかりませんがrole_management、正しいテーブル名はrole_managementです。management_idまた、このテーブルにはとの 2 つの列しかありませんが、このエラーでもこのテーブルにとrole_idを挿入したいと考えています。created_atupdated_at

composer config:cache と composer cache:clear を使用して dump-autoload を構成しましたが、何も起こりませんでした。

私のコードに何か問題がありますか? 管理モデル:

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;

class Management extends Authenticatable
{
use EntrustUserTrait;
protected $table='managements';
protected $fillable=['name','password'];
public function roles()
{
    return $this->belongsToMany('App\Role')->withTimestamps();
}
}
4

1 に答える 1