渴望加载没有空集合

时间:2014-05-14 15:20:46

标签: laravel-4 eloquent

$products = Product::with(
    array(
        'productDescriptions' => function($query) {
             $query->lang(App::getLocale());
         },
        'productImages' => function($query) {
             $query->imageType('thumbnail');    
        }))
    ->paginate($items_per_page);

嗨,有没有一种简单的方法来加载关系,但只有它们存在?更具体地说,如果他们的productDescriptions不是空的,我想只获得这些产品。 在SQL中我只是做一个内部联接,但是如何在Eloquent中轻松实现呢?我可以预先检查所有退回的产品并检查是否$product->productDescription->count() > 0但是可能有更简单的方法来实现这一点。

2 个答案:

答案 0 :(得分:6)

有两种方法:haswhereHas

$products = Product::with(   // this part will load the relation
  array(
    'productDescriptions' => function($query) {
         $query->lang(App::getLocale());
     },
    'productImages' => function($query) {
         $query->imageType('thumbnail');    
    }))
  ->has('productDescriptions') // this will make sure only Products having related descriptions will be fetched
  ->paginate($items_per_page);

答案 1 :(得分:0)

您可以执行Eager Load Constraints,如文档中所示。

所以你需要做一些像这样的事情(没有经过测试 - 但你明白了):

$products = Product::with(
    array(
        'productDescriptions' => function($query) {
             $query->where('productDescription', '!=', '')->lang(App::getLocale());
         },
        'productImages' => function($query) {
             $query->imageType('thumbnail');    
        }))
    ->paginate($items_per_page);