Laravel 存在多对多的模型关系

Laravel Model Relation Where Many-to-Many Exists

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

Assessment --> belongsToMany --> Users

Assessment --> hasMany --> Action Item

Action Item --> belongsToMany --> Users

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

目前,我在评估和操作项之间有一个 Eloquent 关系 - hasMany。很简单。但是,如果我可以创建 两个 附加关系将是理想的:assignedActionItemsunassignedActionItems。换句话说,一个 return 个与用户之间的关系为空的操作项,另一个 return 个不存在的操作项。

简而言之,这样的关系可能吗?

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 属性实现了它,但如果我能将它写成实际关系,它会感觉更干净并且能够延迟加载等。

听起来您应该能够检查关系是否存在,而不是定义新关系。

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