Laravel查询哪里和哪里

时间:2020-06-17 08:52:43

标签: sql laravel

我基本上试图将两个SQL请求放入一个laravel数组中。

这些是我的SQL

SELECT * FROM `transactions` WHERE `plan` LIKE '1050' ORDER BY `updated_at` DESC
SELECT * FROM `transactions` WHERE `user` LIKE '1050' ORDER BY `updated_at` DESC

我想让所有具有“计划” ==“ 1050”的交易以及所有具有“用户” ==“ 1050”的交易在一个变量中。

这对我不起作用:

$ct=transactions::where('user',$user->id)
    ->orWhere('plan', $user->id)
    ->orderby('created_at',"asc")->get();

1 个答案:

答案 0 :(得分:1)

结合两个union compatible查询(例如您的查询)的结果的上下文无关方法是:

$result = transactions::where('plan', 'LIKE', $user->id)->orderBy('updated_at', 'DESC')
                 ->union(
                      transactions::where('user', 'LIKE', $user->id)
                         ->orderBy('updated_at', 'DESC')
                 )
                 ->get();

这当然意味着结果是按计划和用户排序的。您可以使用以下功能对结果进行全局updated_at排序:

$result = $result->sortBy('updated_at', 'DESC');

还有一种在查询级别执行此操作的方法,但是我看不出太多好处,因为无论如何您都会获取所有数据。

上面的查询在功能上应等效于:

$result = transactions::orWhere('plan', 'LIKE', $user->id)
                        ->orWhere('user', 'LIKE', $user->id)
                        ->orderBy('updated_at', 'DESC')
                        ->get();

与联合的结果相同,但顺序不同。

相关问题