Eloquent Query用于获取用户未完成交易的所有用户失败的交易

时间:2018-01-05 13:08:40

标签: php mysql laravel eloquent

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

我有两个表,userstransactions。用户可以拥有多笔交易,而交易的状态可以是completedfailed

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

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

问题是它返回用户列表而不是失败的事务。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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()