仅当数据透视属性为 null 时才通过 manyToMany 计算相关模型 - Laravel

Counting Models related through manyToMany only if a pivot attribute null - Laravel

我正在详细说明此处获得的代码

我想要的:

我想收集与任何每周 Routine 相关的 Activities。枢轴 table 的属性 done_at 告诉我任何 activity(任务)何时完成。

我可以在多对多关系中列出和稍后 ->count() 与父模型相关的活动:

public function activities()
{

    return $this->belongsToMany('App\Models\Activity', 'activity_routine', 'routine_id', 'activity_id')->withPivot('done_at')->withTimestamps();
}

现在我想获取尚未完成的活动集合。它们的主元属性 done_at 设置为 null

我的尝试:

我希望下面的代码有效。不幸的是它没有。 我收到错误 Illegal operator。当我简单地输入 '=' 而不是 '!=' 时,代码就像梦一样工作,但它给了我已经完成的活动列表。

有什么提示吗?

public function activitiesOnlyDone()
{

    return $this->belongsToMany('App\Models\Activity')->withPivot('done_at')->wherePivot('done_at','!=',null);
}

其他提示: getting the value of an extra pivot table column laravel

我相信在这种情况下,您可以替换

->wherePivot('done_at','!=',null);

简单

->whereNull('done_at');

如果其他表上有 done_at 列,您将必须这样做

->whereNull('activity_routine.done_at');

这是有效的,因为关系 class 使用 Laravel 的查询构建器来构造最终的数据库查询。任何在关系 class 中未定义的关系上调用的方法都将通过 __call() 方法传递给查询构建器 (Illuminate\Database\Query\Builder)。