在 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();
希望以上代码对您有所帮助。代码未经测试,但逻辑会帮助你。 :)
我正在使用 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();
希望以上代码对您有所帮助。代码未经测试,但逻辑会帮助你。 :)