存在多对多的Laravel模型关系

时间:2017-10-17 21:09:54

标签: php laravel-5 laravel-5.5

考虑以下关系结构(使用Laravel Eloquent关系):

Assessment --> belongsToMany --> Users

Assessment --> hasMany --> Action Item

Action Item --> belongsToMany --> Users

实际上,这意味着可以将单个评估分配给许多不同的用户,然后一旦创建了一个操作项,该项就可以分配给任何或所有这些用户。

目前,我在评估和行动项目之间有一个雄辩的关系 - hasMany。很简单。但是,如果我可以创建两个其他关系,那将是理想的:assignedActionItemsunassignedActionItems。换句话说,一个人会返回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属性实现了它,但是如果我可以把它写成一个实际的关系,它会感觉更干净,能够延迟加载等等。

1 个答案:

答案 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条件来进一步缩小查询范围。