【问题标题】:Laravel Entrust change table nameLaravel Entrust 更改表名
【发布时间】:2016-03-21 15:07:37
【问题描述】:

我正在使用 laravel 5.2 多重身份验证,因此我创建了一个新的管理表而不是用户表。

我已经为角色和权限安装了 Entrust。在委托安装过程中,我将委托:迁移内容更改为:

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','عملیات با موفقیت انجام گردید.');
}

它会显示一个错误:

SQLSTATE[42S02]:未找到基表或视图:1146 表 'digikala.management_role' 不存在(SQL:插入management_rolecreated_atmanagement_idrole_idupdated_at ) 值 (2016-03-21 14:26:24, 1, 1, 2016-03-21 14:26:24))

我不知道为什么它显示management_role 而不是role_management,而正确的表名是role_management。另外,我在这个表中只有两列,management_idrole_id,而且在这个错误中它想在这个表中插入 created_atupdated_at

我使用了 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();
}
}

【问题讨论】:

  • 我可以看看你们的管理模式吗?
  • 我已经添加了我的管理模型。
  • 角色功能与本题无关。

标签: php laravel entrust


【解决方案1】:

无需重写roles 关系函数。它已经存在于EntrustUserTrait

您可以删除它,它应该可以工作。

【讨论】:

  • 但您还必须在 EntrustUserTrai.php 中将 user_id 更改为 management_id
  • 可以通过在app/config/entrust.php的数组中添加'user_foreign_key' => 'management_id'来配置
猜你喜欢
  • 2016-10-09
  • 2016-02-26
  • 2019-09-01
  • 2016-12-04
  • 1970-01-01
  • 2019-08-11
  • 2016-10-19
  • 2017-12-13
  • 2018-02-12
相关资源
最近更新 更多