仅当枢轴属性为空时才通过 manyToMany 计算相关模型 - Laravel
Posted
技术标签:
【中文标题】仅当枢轴属性为空时才通过 manyToMany 计算相关模型 - Laravel【英文标题】:Counting Models related through manyToMany only if a pivot attribute null - Laravel 【发布时间】:2016-08-19 18:14:27 【问题描述】:我正在详细说明这里获得的代码 ManyToMany relation - how update attribute in pivot table
我想要什么:
我想收集与任何每周Routine
相关的Activities
集合。数据透视表的属性 done_at
告诉我任何活动(任务)何时完成。
我可以在多对多关系中列出与父模型相关的->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
【问题讨论】:
【参考方案1】:我相信在这种情况下,你可以替换
->wherePivot('done_at','!=',null);
用一个简单的
->whereNull('done_at');
如果其他表上有done_at
列,您将不得不这样做
->whereNull('activity_routine.done_at');
这是因为 Relation 类使用 Laravel 的查询构建器来构建最终的数据库查询。并且任何未在 Relation 类中定义的关系上调用的方法都将通过 __call()
方法传递给查询构建器(Illuminate\Database\Query\Builder)。
【讨论】:
令我惊讶的是它确实有效。谢谢你。我还向 Laravel/Framework 提交了错误报告,因为Illegal operator
错误是需要修复的。谢谢!以上是关于仅当枢轴属性为空时才通过 manyToMany 计算相关模型 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章