我的代码中存在很大问题。如果想要的行返回null(这意味着没有数据符合搜索条件),我试图返回0
我的查询是:
$total7 = DB::table('agencies')
->join('users' , 'users.id' , '=' , 'agencies.user_id')
->join('user_addresses' , 'user_addresses.user_id' , '=' , 'users.id')
->join('cities' , 'cities.id' , '=' , 'user_addresses.city_id')
->join('country_states', 'country_states.id' , '=' , 'cities.state_id')
->select('agencies.id as agenID ','country_states.name as sName', DB::raw('count(agencies.id) as agencount') , 'agencies.created_at as agencreate' )
->where ('country_states.name','=','Capital Governorate')
->whereNULL ('agencies.id')
->whereBetween('agencies.created_at' , ['2017-01-01' , '2017-03-31'] )
->groupBy(DB::raw("MONTH(agencies.created_at)") , 'country_states.name')
->get();
此语句应返回0,0,2但现在它不返回任何内容。
我希望它搜索抛出指定的月份范围(3个月)并返回值(如果存在)或0(如果没有值)。
我试过IFNULL
但没有尝试。
有什么帮助吗?
答案 0 :(得分:0)
尝试检查集合的计数:$total7->count();
`
答案 1 :(得分:0)
你可以从查询中做到:
使用IFNULL:
IFNULL(fieldname,0)
答案 2 :(得分:0)
if(!$total7) {
$result = 0;
}
然后在您的控制器或刀片文件中使用$result
变量
答案 3 :(得分:0)
答案 4 :(得分:0)
答案更新:
我用术语更改了查询以返回我只需要的内容
count(agencies.id)
所以查询输出的代码是:
$countt = 3;
$ii = 1;
do{
$total7 = DB::table('agencies')
->join('users' , 'users.id' , '=' , 'agencies.user_id')
->join('user_addresses' , 'user_addresses.user_id' , '=' , 'users.id')
->join('cities' , 'cities.id' , '=' , 'user_addresses.city_id')
->join('country_states', 'country_states.id' , '=' , 'cities.state_id')
->select( DB::raw('ifnull(count(agencies.id),0) as agencount'))
->where ('country_states.name','=', $gover)
->whereMonth('agencies.created_at' , $ii)
->groupBy(DB::raw("MONTH(agencies.created_at)") , 'country_states.name')
->first();
if ( count($total7) == 0 ){
echo '0,';
}else{
echo $total7->agencount.',';
}
$ii++;
}while ($ii <= $countt);
$gover
是来自另一个更大的foreach
循环的值,循环抛出我所拥有的所有省份。 $ii
是一个计数器作为月份计数器搜索投掷所需的月份范围。进行查询搜索,直到达到所需月份的限制(从1到3为3个月)。
如果当前月份没有值,则返回值为0,如果为零,则以其他方式打印,给出返回值。
我感谢所有评论过这个问题的人。我对你有利。