【发布时间】:2020-05-11 16:07:47
【问题描述】:
我是 Laravel 的新手。我很难加入两个表(用户表和事务表)。下面是来自 TransactionController 的代码。
public function index()
{
$user = User::all();
$transactions = $user->transactions;
$transaction = array();
foreach ($transactions as $row) {
array_push($transaction,
[
'id' => $row->id,
'name' => $row->user->name,
]
);
}
return response() -> json ([
'transaction' => $transaction,
]);
}
我想在 Postman 中打印所有用户的姓名和所有交易。我设法打印了所有用户的姓名,但是当我尝试加入事务表时,我遇到了一个错误。我已经尝试过如下左连接方法:
$user = User::all()
->select('user.id','user.name')
->join('transactions','transactions.id','=','user.id')
->get();
foreach ($transactions as $row) {
array_push($transaction,
[
'id' => $row->id,
'name' => $row->user->name,
]
);
}
return response() -> json ([
'transaction' => $transaction,
]);
}
有没有办法在 laravel 中加入两个表?谢谢。
【问题讨论】:
-
错误是什么?
-
其实我想在 Postman 中打印所有用户的交易。如果我使用 `$user = Auth::guard('api')->user();` 它将仅根据用户的 id 打印某些用户的交易
-
您编写的代码存在很多问题。我认为如果您查看 Laravel 关系和集合,它将对您最有帮助。您无法从集合中提取交易列表,您需要循环访问这些用户以获取每个交易的 txns。但这一切都取决于您是否正确建立了关系。
-
@Watercayman 这是否意味着我需要执行多个 foreach 循环?
-
用户和交易是一对多的。每个用户将拥有多个交易作为一个集合。您无法从用户集合中获取
user->transaction,您必须在users上循环,然后在transaction上循环或选择一个。这就是我所说的可能需要对关系和集合做一点研究的意思。
标签: php laravel eloquent left-join