gpt4 book ai didi

laravel - whereHas 和 whereDoesntHave 在 laravel eloquent 中未按预期工作

转载 作者:行者123 更新时间:2023-12-03 08:31:04 24 4
gpt4 key购买 nike

我的查询:

Payment::whereHas('subscription',function($q)
{
$q->where('ends_at','>',today());
})->orWhereDoesntHave('subscription')->where('user_id',1)->first();

输出:

App\Payment {#4339
id: 6,
user_id: 317,
package_id: 6,
amount: 12500,
phone: "01849744603",
transaction_id: "F1234",
confirmed: 1,
created_at: "2020-11-29 14:29:08",
updated_at: "2020-11-29 16:40:03",
}

我的逻辑是:当我付款时,如果管理员批准付款,则会在一定时间内为特定包创建订阅。我想获取用户未订阅但已付款或订阅未过期的付款信息。我编写了上面的代码,它为我提供了数据库第一笔付款信息的输出。不适用于查询中给定 user_id 的用户。我应该如何接近?这里有什么问题吗?谁能帮我吗?

最佳答案

问题可能与 SQL 中逻辑运算符的优先级有关。您生成的 SQL 将是类似这样的伪 SQL。

in (select * from subscriptions) OR ! in (select * from subscriptions) and user_id = 1

将查询包装在带有闭包的 where() 中会在 SQL 中围绕第一部分创建括号,并且安全优先级是正确的。

Payment::where(function ($query) {
$query->whereHas('subscription', function($q)
{
$q->where('ends_at','>',today());
})->orWhereDoesntHave('subscription');
})->where('user_id',1)->first();

关于laravel - whereHas 和 whereDoesntHave 在 laravel eloquent 中未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65059468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com