Laravel委托更改table名称
Laravel Entrust change table name
我正在使用 laravel 5.2 多重身份验证,所以我创建了一个新的管理 table 而不是用户 table。
我已经为角色和权限安装了 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 个模型,角色、权限和管理。一切正常,但问题是当我想使用以下代码将 attachRoles 附加到 role_management
table 中时:
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','عملیات با موفقیت انجام گردید.');
}
它会显示一个错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'digikala.management_role' doesn't exist (SQL: insert into management_role
(created_at
, management_id
, role_id
, updated_at
) values (2016-03-21 14:26:24, 1, 1, 2016-03-21 14:26:24))
我不知道为什么它显示management_role
而不是role_management
,而正确的table名称是role_management
。此外,我只有两列,management_id
和 role_id
,在这个 table 中,但在这个错误中它也想插入 created_at
和 updated_at
到这个table.
我使用了 composer config:cache 和 composer cache:clear 以及 compose 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();
}
}
无需覆盖 roles
关系函数。它已存在于 EntrustUserTrait
.
您可以删除它,它应该可以工作。
我正在使用 laravel 5.2 多重身份验证,所以我创建了一个新的管理 table 而不是用户 table。
我已经为角色和权限安装了 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 个模型,角色、权限和管理。一切正常,但问题是当我想使用以下代码将 attachRoles 附加到 role_management
table 中时:
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','عملیات با موفقیت انجام گردید.');
}
它会显示一个错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'digikala.management_role' doesn't exist (SQL: insert into
management_role
(created_at
,management_id
,role_id
,updated_at
) values (2016-03-21 14:26:24, 1, 1, 2016-03-21 14:26:24))
我不知道为什么它显示management_role
而不是role_management
,而正确的table名称是role_management
。此外,我只有两列,management_id
和 role_id
,在这个 table 中,但在这个错误中它也想插入 created_at
和 updated_at
到这个table.
我使用了 composer config:cache 和 composer cache:clear 以及 compose 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();
}
}
无需覆盖 roles
关系函数。它已存在于 EntrustUserTrait
.
您可以删除它,它应该可以工作。