我有一个返回匹配值的查询。
Availability::select(DB::raw('count(start) as count,start'))
->whereIn('start', [100,200,300,400])
->groupBy('start')
->get();
并返回:
count | start
1 | 100
2 | 200
我希望在结果中显示0个计数值。比如:
count | start
1 | 100
2 | 200
0 | 300
0 | 400
dd(),日期为值。['2018-09-10', '2018-09-18', '2018-09-16','2018-09-15'].
array:1 [▼
0 => array:2 [▼
"count" => 1
"start" => "2018-09-10"
]
]
有什么想法吗?提前感谢:)
2条答案
按热度按时间b5lpy0ml1#
您可以用需要比较的变量(100200300400)创建一个额外的表。然后你可以一起数数。
这并不漂亮,但这里有一个例子:http://sqlfiddle.com/#!9/3f906c/1号
kqlmhetl2#
因此,使用集合可以执行以下操作:
在数组/集合中定义开始日期
你可以用这个
whereIn('start', $dates)
```$result = Availability::...
$collection = $dates->map(function($item) use($result) {
return ['count' => $result->firstWhere('start', $item)['count'] ?? 0, // in case line does not work use optional($result->firstWhere('start', $item))->count ?? 0,
'start' => $item];
});
dd($collection); // your desired result