0

2 つのモデルがProductありVariantProducthasManyVariantVariantbelongsToがあり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);
4

1 に答える 1

0

Eager ロードの制約によって解決される場合があります。

$Variants =Variants::where('color', 'red')
->with(配列(
     「商品」 => 関数($クエリ) {
        $query->where('価格', '>', 10);
     }
    ,「その他のモデル」
    、「フーバー」
)))
->ページ付け(10);
于 2013-06-26T08:10:13.980 に答える