【问题标题】:Eloquent Query for getting all user failed transactions where user has no completed transactions雄辩的查询,用于获取用户没有完成交易的所有用户失败的交易
【发布时间】:2018-06-15 07:22:54
【问题描述】:

我很难构建一个雄辩的查询来提供问题案例的交易仪表板。问题被定义为用户尚未完成交易的所有失败交易。

我有两张桌子,userstransactions。一个用户可以有很多事务,一个事务的状态可以是completedfailed

我需要一个雄辩的查询来从所有至少有一个失败交易且没有任何已完成交易的用户那里获取失败交易的列表。我目前通过查询用户而不是交易来从另一个方向解决这个问题

$failed_transactions = User::has('transactions')->whereDoesntHave('transactions', function($query) {
     $query->where('status', 'completed');
})->get();

问题在于它返回的是用户列表,而不是失败的交易。

任何帮助将不胜感激!

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案1】:

    我需要一个雄辩的查询来从所有至少有一个失败交易且没有任何已完成交易的用户那里获取失败交易的列表。

    如果你想得到一个失败的交易集合:

    Transaction::whereHas('user.transactions', function($q) {
            $q->where('status', 'failed');
        })
        ->whereDoesntHave('user.transactions', function($q) {
            $q->where('status', 'completed');
        })
        ->where('status', 'failed')
        ->get()
    

    如果您想让用户处理失败的交易:

    User::whereHas('transactions', function($q) {
            $q->where('status', 'failed');
        })
        ->whereDoesntHave('transactions', function($q) {
            $q->where('status', 'completed');
        })
        ->with(['transactions' => function($q) {
            $q->where('status', 'failed');
        }])
        ->get()
    

    【讨论】:

    • 谢谢@Alexey,很有魅力。为什么第一个查询需要最终的->where('status', 'failed') 以及whereHas()
    • @frostfat whereHas() 检查用户是否有失败的交易,where() 只获得失败的交易。
    猜你喜欢
    • 2019-08-14
    • 2015-08-27
    • 1970-01-01
    • 2017-04-08
    • 2023-01-05
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多