【发布时间】:2016-01-21 05:00:22
【问题描述】:
我有一个用户模型和一个属性模型。用户有 3 个角色:管理员、经理和经纪人。管理员可以查看所有属性,而经理和经纪人只能查看分配给他们的属性。经理或经纪人可能有许多财产,而财产可能属于任意数量的经理和经纪人。这是我的用户模型中的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 语句,我只能在用户 不是 管理员的情况下这样做,因为当前代码返回整个 Collection如果用户是管理员。这使得该方法无法用于搜索功能和任何类型的约束。
显然,我不想在property_user 表中为每个属性和管理员创建记录,因为这会占用大量不必要的空间。但是,我不想在我的控制器中有额外的逻辑,如果用户是经理或经纪人,则只调用 properties 方法,如果用户是管理员,则执行自定义查询。
有什么方法可以返回包含每一行的Illuminate\Database\Eloquent\Relations\BelongsToMany?或者我仍然可以将查询链接到另一个 Laravel 对象?
【问题讨论】:
标签: php mysql laravel laravel-5