我基本上试图将两个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();
答案 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();
与联合的结果相同,但顺序不同。