如何使用Laravel和MySQL处理三个或更多类的多对多关系
我正在与Laravel和Elount/MySQL合作一个项目 我想知道如何处理与三个表(用户、商家、角色)的多对多关系如何使用Laravel和MySQL处理三个或更多类的多对多关系,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我正在与Laravel和Elount/MySQL合作一个项目 我想知道如何处理与三个表(用户、商家、角色)的多对多关系 任何用户都可以有一个或多个商户 任何商家都可以在用户之间共享 任何用户都有商户的特定角色 是否有可遵循的最佳实践 如何通过具有特定角色的用户获取所有商户 谢谢你的帮助 这是我目前的结构: Users ------------------------------- | id | first_name | last_name | ------------------------
- 任何用户都可以有一个或多个商户
- 任何商家都可以在用户之间共享
- 任何用户都有商户的特定角色
Users
-------------------------------
| id | first_name | last_name |
-------------------------------
商人模式
有没有一种方法可以使用roles.hierarchy而不是role\u id?$merchants=merchants::where has('users',function($query)use($user\u id,$hierarchy){$query->where('user\u id',$user\u id)->where has('roles',function($query use($hierarchy){$query where('hierarchy->where('hierarchy’,$hierarchy)代码>我尝试了$this->user->merchants()->getAdmin()
,但是没有成功`公共函数scopeGetAdmin($query){return$query->wherePivot('role_id',1)->orderBy('trade_name',asc')->get();}`我得到了一个错误:找不到列:1054未知列'where子句'pivot'(SQL:select*from merchants internal join merchant\u user\u role on merchants.id=merchant\u user\u role.merchant\u id where merchant\u user\u role.user\u id=164和pivot=role order by trade\u name asc,trade\u name asc)
当我将代码放入本地范围的方法时,为什么不起作用?公共函数scopeGetAdmin($query){return$query->->with pivot('role_id')->wherePivot('role_id',1);}
抛出BadMethodCallException:调用未定义的方法Illumb\Database\Eloquent\Builder::withPivot()
。我用$user->merchants()->getAdmin()调用该方法
withPivot方法适用于belongToMany,但不适用于雄辩的查询。商户关系已包含withPivot。使用$user->merchants()->where('role\u id',$some\u role\u id)->get();
Merchants
-------------------
| id | trade_name |
-------------------
Roles
-------------------------
| id | name | hierarchy |
-------------------------
merchant_user_role
-----------------------------------
| merchant_id | user_id | role_id |
-----------------------------------
$merchants = $user->merchants()->where('role_id', $some_role_id)->get();