分散在Laravel 5.4中的渴望加载

时间:2017-08-17 11:40:22

标签: laravel laravel-5 pagination laravel-5.4 eager-loading

我有items table和bootstrap_themes表。

他们之间的关系是-------

项目 hasOne BootstrapTheme

现在我正在尝试根据项目具有的过滤器来过滤bootstrapthemes。

$themes = BootstrapTheme::with(['item' =>function($q) use($request){
            if($request->has('is_saleable')){
                $q->where('is_saleable','=',$request->is_saleable);
            }
            if($request->has('is_disable')){
                $q->where('is_disable','=',$request->is_disable);
            }
        }])->paginate(30);

假设我按is_disable属性过滤,那么结果集如下:

  

{" CURRENT_PAGE":1,"数据":[{" ID":1," ITEM_ID":1,&# 34; created_at":" 2017-08-17 11:24:14"," updated_at":" 2017-08-17 11:24:14&#34 ;,"项目":空}],"从":1," last_page":1," next_page_url":空,&# 34;路径":" HTTP://127.0.0.1:8000 /所有主题"" per_page":30," prev_page_url":空, "至":1,"总":1}

我的问题是,当item为null时,可以将BootstrapTheme计数为0。

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以使用whereNull()方法检查NULL advanced where clauses.

$query = Model::where('field1', '=',  1)
->whereNull('field2')
->paginate(30);

答案 1 :(得分:0)

我使用whereExists找出了解决方案 现在,当没有项目时,不会计算bootstrapthemes。

$themes = BootstrapTheme::with(['item'])->whereExists(function($q) use ($request){
            $q->select(DB::raw(1))->from('items')->whereRaw('bootstrap_themes.item_id = items.id');
            if($request->has('is_saleable')){
                $q->where('items.is_saleable','=',$request->is_saleable);
            }
            if($request->has('is_disable')){
                $q->where('items.is_disable','=',$request->is_disable);
            }
        })->paginate(30);