当我'直接'应用wherePivot
时,它可以工作,但是当我在when
子句中应用它时,它不能工作。我得到错误:Column not found: 1054 Unknown column 'pivot' in 'where clause'
return Company::where('owner_id', auth()->user()->id)
->with(['subscribers' => function ($q) {
$q->wherePivot('is_customer', 1); // This works
$q->when($this->type != 'all', function ($q) {
$q->wherePivot('is_customer', 1); // This does not
});
$q->when($this->example != 'all', function ($q) {
$q->where('example', 1); // This works
});
}
])
->firstOrFail();
1条答案
按热度按时间pjngdqdw1#
第一个问题是使用同一个变量
$q
作为内部和外部查询:在第一个执行严修中,
$q
是belongsToMany
,因为Company.php
中的public function subscribers()
是多对多相关,可能定义为return $this->belongsToMany(Subscriber::class);
(或类似)。当您呼叫$q->wherePivot(/* ... */)
时,会对枢纽分析表的数据执行查询。在第二个示例中,
$q
是一个基本的Builder
示例。当您调用$q->wherePivot(/* ... */)
时,它将执行一个“魔术方法”查询,该查询在所有Eloquent Model上都可用。where{Column}()
,如whereId()
、whereEmail()
、wherePivot()
等,将执行一个等效的查询,如WHERE id ...
。WHERE email ...
,最后是WHERE pivot ...
。由于您没有名为pivot
的列,因此此操作失败。此处的解决方案是不使用相同的变量名,而是在查询时向前传递它:
现在,您可以清楚地看到调用了哪个示例
wherePivot()
,$query
是belongsToMany()
查询,$subQuery
是Builder
示例,并且没有直接使用。