繁体   English   中英

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

[英]Laravel: whereHas() with complex conditions

我有两个模型,比如

及其各自的表结构为:-

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

我不确定我是否理解公式,但是如果您想获取有更多可用插槽的模块,则可以执行以下操作:

$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;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM