【发布时间】:2022-03-19 19:25:12
【问题描述】:
我正在使用由数据透视表链接的 2 个模型,模块和客户端。
第一个,modules模型,可以有子模块,如下表结构,
| id |...| module_id |
module_id 指的是父模块。
这个模型有如下关系:
public function parentModule()
{
return $this->belongsTo(Module::class, 'module_id');
}
public function childModules()
{
return $this->hasMany(Module::class, 'module_id')
->with('childModules')
->orderBy('order');
}
public function Clients()
{
return $this->belongsToMany(Client::class, 'client_module', 'module_id', 'client_id');
}
public function scopeBaseModules($query)
{
return $query->whereNull('module_id');
}
所以,如果我这样做:
Module::BaseModules()->with('childModules')->get()
我得到了所有模块及其各自的孩子。
Module 1
->second level child module X
->->third level child module Y
Module 2
...
Client 模型是一个简单的表,带有 Id 和其他信息,并具有以下关系:
public function modules()
{
return $this->belongsToMany(Module::class, 'client_module', 'client_id', 'module_id');
}
两个表通过数据透视表 client_module 链接,结构如下:
| client_id | module_id |
所以,如果我这样做:
Module::BaseModules()
->with('childModules')
->with('clients')
->get()
我将获取所有模块,它们各自的子模块,以及链接到它们的客户端。
现在我需要获取该查询,但只返回来自特定客户端的模块和子项。我试过范围:
public function scopeClient($query, $client)
{
return $query->wherePivot('client_id', $client);
}
假设这会将查询过滤到特定于客户端的 id,但不会!
请有人指导我正确的方向吗?
【问题讨论】:
标签: laravel eloquent scope pivot