2 つのモデルがProduct
ありVariant
、Product
hasManyVariant
とVariant
belongsToがありProduct
ます。両方のモデルには、他にも多くの関係が含まれています。
質問: Eloquent を使用してすべてのバリアントを選択し->where('color','red')
、関連する要件をProduct
満たすにはどうすればよいです->where('price', '>' '50')
か? 返された結果セットの Variant のすべての関係を保持する必要があります。
Eloquent モデルでajoin
を使用すると、結合された を除くすべての関係が失われ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);