有2个模型Product
和Variant
,其中Product
有多个Variant
,Variant
属于Product
。两个模型还包含许多其他关系。
问题:如何使用Eloquent选择所有变体->where('color','red')
,并且其相关的Product
必须满足->where('price', '>' '50')
?必须保留返回结果集中Variant的所有关系。
当在Eloquent模型上使用join
时,除了已加入的products
之外,所有关系都将丢失。例如:$variant->product->id
有效,但不是$variant->someOtherModel->id
。
$variants =Variants::where('color', 'red')
->join('products', 'variants.product_id', '=', 'products.id')
->where('product.price', '>', 10)
->paginate(10);
foreach($variants as $variant) {
echo $variant->product->id; //works
echo $variant->someOtherModel->id; // error, undefined function
}
你如何维持所有$variant
的关系?
每个WHERE
子句似乎都使用OR
而不是AND
进行链接!这太疯狂了!
$variants = Variant::where('color', 'red')
->with(array('Product' => function($query) {
if(Input::get('price') $query->where('price', '>', 10);
if(Input::get('brand') $query->where('brand', Input::get('brand'));
}))
->paginate(10);
答案 0 :(得分:0)
急切的负载限制可以解决它:
$Variants =Variants::where('color', 'red') ->with(array( 'Product' => function($query) { $query->where('price', '>', 10); } ,'OtherModel' ,'FooBar' )) ->paginate(10);