我有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。
提前致谢
答案 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);