在 Laravel 模型集合上使用闭包应用条件

Apply conditions using closure on Laravel Model collection

我正在使用 Laravel 模型集合并想过滤记录 在第一个语句中,我正在检查我是否只在它有某个日期时检查结束,否则不比较值。 如何检查这个集合中的空值?

2nd 如果工作正常。我也使用了过滤方法,但它对我不起作用。谁能建议我如何以正确的 laravel 方式做到这一点?我知道我可以使用 for each loop 来做到这一点,但我想让查询更快。请建议您的答案。谢谢

$subscriptionsCount = Subscription::where( function($query) {
if($query->where('ends_at', '!=' , null)){
  $query->where('ends_at', '>=', now());
}
else if($query->where('subscription_ends_at', '>=', now())){
  $query->where('subscription_ends_at', '>=', now());
}
})->where('name', $betTypeName)->count();

你能试试这个代码吗,我从你的问题中了解到你需要 whereNotNull

     $subscriptionsCount = Subscription::where(function ($query) {
        $query->where(function ($query) {
            $query->whereNotNull('ends_at')->where('ends_at', '>=', now());
        })->orWhere(function ($query) {
            $query->whereNotNull('subscription_ends_at')
                  ->where('subscription_ends_at', '>=', now());
        });
    })->where('name', $betTypeName)->count();

您可以尝试以下 whereRaw 条件:

$subscriptionsCount = Subscription::where( function($query) {
    $query->whereRaw("(CASE  WHEN ends_at is not null THEN ends_at = now() WHEN subscription_ends_at >= now() THEN subscription_ends_at >= now() END)" );
})->where('name', $betTypeName)->count();

希望以上代码对您有所帮助。代码未经测试,但逻辑会帮助你。 :)