Laravel:whereHas()具有复杂的条件

时间:2018-02-18 12:34:49

标签: mysql sql laravel eloquent laravel-5.4

我有两种模式可以说,

阻止广告位及其各自的表格结构为: -

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');

1 个答案:

答案 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;
});