gpt4 book ai didi

mysql - 提前加入 laravel 5

转载 作者:行者123 更新时间:2023-11-29 01:38:45 25 4
gpt4 key购买 nike

我有一个这样的user

+----+------------+-----------+---------+
| id | first_name | last_name | address |
+----+------------+-----------+---------+
| 1 | x | y | z |
| 2 | a | b | c |
| 3 | p | q | r |
+----+------------+-----------+---------+

还有一个像这样的transfer

+----+--------------+------------+--------+
| id | from_user_id | to_user_id | amount |
+----+--------------+------------+--------+
| 1 | 1 | 2 | 20 |
| 2 | 2 | 1 | 10 |
| 3 | 3 | 2 | 10 |
+----+--------------+------------+--------+

现在我可以像这样使用连接查询了

 $transfer = DB::table('users')
->join('transfers', function($join) {
$join->on('users.id', '=', 'transfers.from_user_id');
})
->select('users.first_name','users.last_name', 'transfers.amount', 'transfers.date')
->get();

但这样做只会给我 first_namelast_name 对应于 from_user_id 。但我还想要相应的 first_namelast_name 分别对应于 to_user_id。我怎样才能得到它们?

我想要的输出表

+---------+---------+--------+
| sent_by | sent_to | amount |
+---------+---------+--------+
| xy | ab | 20 |
| ab | xy | 10 |
| pq | ab | 10 |
+---------+---------+--------+

这是生成上表所需的 MySQL 查询。如您所见,它需要 2 个内部联接:

SELECT CONCAT(u1.first_name, u1.last_name), CONCAT(u2.first_name, u2.last_name), t.amount
FROM transfer t INNER JOIN user u1
ON t.from_user_id = u1.id
INNER JOIN user u2
ON t.to_user_id = u2.id

最佳答案

这是我尝试为您的 Laravel 查询提供的解决方案:

$transfer = DB::table('transfer')
->join('user as u1', 'transfer.from_user_id', '=', 'u1.id')
->join('user as u2', 'transfer.to_user_id', '=', 'u2.id')
->select(DB::raw('CONCAT(u1.first_name, u1.last_name) AS sent_by'),
DB::raw('CONCAT(u2.first_name, u2.last_name) AS sent_to'),
'transfer.amount as amount')
->get();

诀窍是知道如何为从 transferuser 表的双连接添加别名,以及使用 DB::raw() 访问 MySQL CONCAT 函数。

关于mysql - 提前加入 laravel 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32090786/

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