Eloquent和Joins不保留模型关系

时间:2013-06-26 02:09:10

标签: php laravel laravel-4 eloquent

有2个模型ProductVariant,其中Product有多个VariantVariant属于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);

1 个答案:

答案 0 :(得分:0)

急切的负载限制可以解决它:

$Variants =Variants::where('color', 'red')
->with(array(
     'Product' => function($query) {
        $query->where('price', '>', 10);
     }
    ,'OtherModel'
    ,'FooBar'
))
->paginate(10);