Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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
如何使用Laravel和MySQL处理三个或更多类的多对多关系_Mysql_Laravel_Eloquent - Fatal编程技术网

如何使用Laravel和MySQL处理三个或更多类的多对多关系

如何使用Laravel和MySQL处理三个或更多类的多对多关系,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我正在与Laravel和Elount/MySQL合作一个项目 我想知道如何处理与三个表(用户、商家、角色)的多对多关系 任何用户都可以有一个或多个商户 任何商家都可以在用户之间共享 任何用户都有商户的特定角色 是否有可遵循的最佳实践 如何通过具有特定角色的用户获取所有商户 谢谢你的帮助 这是我目前的结构: Users ------------------------------- | id | first_name | last_name | ------------------------

我正在与Laravel和Elount/MySQL合作一个项目

我想知道如何处理与三个表(用户、商家、角色)的多对多关系

  • 任何用户都可以有一个或多个商户
  • 任何商家都可以在用户之间共享
  • 任何用户都有商户的特定角色
是否有可遵循的最佳实践

如何通过具有特定角色的用户获取所有商户

谢谢你的帮助

这是我目前的结构:

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();