我搜索过并搜索过,无法找到解决方法。我使用的是Laravel 5.5。
我有一个简单的3表系统设置,如下所示:
产品型号 hasMany option_items option_items belongsToMany 产品
我可以同步并保存,一切都很好。
我甚至可以返回似乎有"或"的结果。运营商。含义...我可以找到所有产品 option_item.id 4或 option_item.id 5或 option_item.id 8
我想要做的是能够根据option_item过滤产品,因此我应该能够以某种方式完成所有 option_item.id 4 AND option_item.id 5 AND option_item.id 8
结果将更具体,但应更准确。
希望有人可以帮助解决如何查询的方向。我正在学习laravel,但只需要朝着正确的方向前进。
答案 0 :(得分:0)
尝试使用雄辩的关系 https://laravel.com/docs/5.5/eloquent-relationships
类似这样的事情
Products::with(option_items)->whereHas('option_items', function ($q) {
$q->where('id','==', 1);
})->get();
使用选项项目的Id为1的选项项目获取产品;
答案 1 :(得分:0)
你可以这样做:
$optionIds = [2,1];
$users = Product::whereHas('optionItems',function ($q) use ($option_ids){
$q->whereIn('option_items.id',$optionIds);
})->get();
它表明你在Product
模型中有这样的关系:
public function optionItems()
{
return $this->belongsToMany(OptionItem::class, 'option_items_products')
}
答案 2 :(得分:0)
试试这样:
$idArray = array("1","2","3"...);
$productList = Product::
//To check that records exists or not.
whereHas(
'optionItems', function ($query) use ($idArray){
$query->whereIn('id', $idArray);
}
)
//To fetch the matched records.
->with(
[
'optionItems' => function ($query) use ($idArray) {
$query->select('*')->whereIn('id', $idArray);
},
]
)
->get()
->toArray();