我有两种模式可以说,
阻止和广告位及其各自的表格结构为: -
blocks(id, name);
slots(id, block_id, time, status);
slots.status
可用的值为0
或预订时为1
。
问题是,我想返回那些仅status
计数1
与插槽表中的总插槽计数比率小于0.5的块,或者在另一个术语中,我想返回那些预订的时段超过50%的街区。
我有一个如下的laravel雄辩逻辑: -
$blocks = Block::whereHas('slots', function ($q) {
// What might be the condition here... ?
})
->with('slots');
答案 0 :(得分:0)
我不确定我是否理解这个公式,但是如果你想获得有更多可用插槽的块,你可以这样做:
$blocks = Block::withCount(['slots as booked' => function($q) {
$q->where('status', 1);
}])
->withCount(['slots as available' => function($q) {
$q->where('status', 0);
}])
->get();
$blocks = $blocks->filter(function ($block) {
return $block->booked > $block->available;
});