Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自定义表上的Laravel 5 belongsToMany()_Php_Laravel_Laravel 5_Eloquent - Fatal编程技术网

Php 自定义表上的Laravel 5 belongsToMany()

Php 自定义表上的Laravel 5 belongsToMany(),php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我用的是定制的桌子。这是一个简单的用户角色特性。但不使用传统的雄辩的数据库模式风格 表用户 用户标识(PK) 用户名(varchar) 表角色 罗莱德(PK) roleName(varchar) 表userrole数据透视列 用户角色ID 罗莱德 用户ID 现在我有了一个使用这种方法的模型用户 public function roles() { return $this->belongsToMany("App\Role", "userrole", "roleId", "us

我用的是定制的桌子。这是一个简单的用户角色特性。但不使用传统的雄辩的数据库模式风格

表用户

  • 用户标识(PK)
  • 用户名(varchar)
  • 表角色

  • 罗莱德(PK)
  • roleName(varchar)
  • 表userrole数据透视列

  • 用户角色ID
  • 罗莱德
  • 用户ID
  • 现在我有了一个使用这种方法的模型用户

        public function roles()
    {
        return $this->belongsToMany("App\Role", "userrole", "roleId", "userId");
    }
    
    当我这样打电话时,它会出错

    $roles = App\User::where("userId", "1")->first()->roles;
    dd($roles);
    
    显示的错误为:

    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'role.id' in 'on clause' (SQL: select `role`.*, `userrole`.`roleId` as `pivot_roleId`, `userrole`.`userId` as `pivot_userId` from `role` inner join `userrole` on `role`.`id` = `userrole`.`userId` where `userrole`.`roleId` is null)
    
    这是我谦虚的请求。请不要建议更改表架构。我不能。我受够了。
    谢谢大家!

    您在“用户角色”模型上设置了主键吗

    Laravel自动假定您的主键名为
    id

    见此:

    请看主键部分:

    Eloquent还将假定每个表都有一个主键列 命名的
    id
    。您可以定义
    $primaryKey
    属性来覆盖此属性 惯例

    尝试在您的
    userrole
    模型上覆盖它,如下所示:

    protected $primaryKey = 'roleId';
    

    尽量仔细阅读所有文件。

    谢谢!这就是问题所在!非常感谢。这对我很有帮助。谢谢。这是我谦虚的回答,除非你对
    email
    SSN
    等密钥有一个有意义的名称,否则请遵守约定。因为我不需要这样的回答,我希望我们每个人都能在我们工作的每个项目中都能遵守Taylor Otwell的约定,当你不得不在Zend Framework v1和Codeigniter中学习时,你就会明白成为一名专业的web开发人员是什么感觉。