考虑以下关系结构(使用Laravel Eloquent关系):
Assessment --> belongsToMany --> Users
Assessment --> hasMany --> Action Item
Action Item --> belongsToMany --> Users
实际上,这意味着可以将单个评估分配给许多不同的用户,然后一旦创建了一个操作项,该项就可以分配给任何或所有这些用户。
目前,我在评估和行动项目之间有一个雄辩的关系 - hasMany
。很简单。但是,如果我可以创建两个其他关系,那将是理想的:assignedActionItems
和unassignedActionItems
。换句话说,一个人会返回Action Items,他们自己与用户的关系是空的,另一个会返回Action Items而不是。
简而言之,这样的关系是否可能?
public function assignedActionItems() {
return $this->hasMany('App\Entities\ActionItem')
->where( ** ACTIONITEM->USERS IS NOT EMPTY ** );
}
public function unassignedActionItems() {
return $this->hasMany('App\Entities\ActionItem')
->where( ** ACTIONITEM->USERS IS EMPTY ** );
}
如果是,怎么样?
我已经通过$appends
属性实现了它,但是如果我可以把它写成一个实际的关系,它会感觉更干净,能够延迟加载等等。
答案 0 :(得分:0)
这听起来你应该能够检查关系的存在,而不是定义新的关系。
来自https://laravel.com/docs/5.5/eloquent-relationships#querying-relationship-existence:
// Retrieve all action items that have been assigned to at least one user ...
$actionItems = App\ActionItem::has('assigned')->get();
您还可以通过添加所需的计数或其他where
条件来进一步缩小查询范围。