我有一个用户模型和一个属性模型。用户有 3 个角色:admin、manager 和 broker。管理员可以查看所有属性,而经理和经纪人只能查看分配给他们的属性。一个经理或经纪人可能拥有许多属性(property),而一个属性(property)可能属于任意数量的经理和经纪人。这是我的用户模型中的 properties
关系:
/**
* Get all properties belonging to this user.
*
* @return [type] [description]
*/
public function properties()
{
if ($this->isAdmin()) {
return Property::all();
} elseif ($this->isManager() || $this->isBroker()) {
return $this->belongsToMany('App\Property');
}
return null;
}
这对于检索所有属性非常有效,但如果我必须执行 select 或 where 语句,我只能在用户不是管理员时这样做,因为当前代码返回整个集合如果用户是管理员。这使得无法将此方法用于搜索功能和任何类型的约束。
显然,我不想在 property_user
表中为每个属性和管理员创建一条记录,因为那样会占用不必要的空间。但是,我不希望在我的 Controller 中有额外的逻辑来仅在用户是经理或经纪人时调用 properties
方法,而在用户是管理员时执行自定义查询。
有什么方法可以返回包含每一行的 Illuminate\Database\Eloquent\Relations\BelongsToMany
吗?或者我仍然可以将查询链接到另一个 Laravel 对象?
最佳答案
你会想要返回一个查询对象。
public function properties()
{
if ($this->isAdmin()) {
return Property::query();
} elseif ($this->isManager() || $this->isBroker()) {
return $this->belongsToMany('App\Property');
}
return null;
}
关于php - 属于许多获取所有行(Laravel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34910125/