我不知道如何解决我的问题.
我有Model1
个亲戚:
class Model1 extends BaseModel
{
public function details(): BelongsToMany
{
return $this->belongsToMany(
Detail::class,
'model1_details',
'model1_id',
'detail_id',
);
}
}
model1_details
是我的数据透视表.
我也有类似[1, 2, 3]
的详细信息IDarray.
我需要用给定的ID取回属于所有Detail
的Model1
.
我需要在我的过滤器里做这件事. 这就是我的控制器里的东西:
$builder = Model1::filter(new ModelListFilter($request));
而在ModelListFilter内部:
protected function filter(): Builder
{
$request = $this->request;
$request->whenFilled('details', function ($query) {
//
});
return $this->builder;
}
我试过了:
$request->whenFilled('details', function ($query) {
foreach($query as $detailId) {
$this->builder->whereHas('details', function (Builder $innerQuery) use ($detailId) {
$innerQuery->where('detail_id', $detailId);
});
}
});
但它返回所有模型Model 1,即使没有任何详细信息.
UPD个
所以问题不在那里=)'details'
在我的申请中没有填写.
另外,我的$query
是一个字符串,而不是数组,所以我对它调用了json_decode.
上面的代码检索属于id=1的Detail和id=2的Detail的模型,依此类推.
但我认为可能有更好的解决方案,所以我把这个问题留待解决
UPD 2个
也改变了这一点
$innerQuery->where('detail_id', $detailId);
对此
$innerQuery->where('id', $detailId);
所以这里需要传递我们在‘Details表’中的列,而不是来自数据透视表的列