如何在 laravel 中连接两个表?

Posted

技术标签:

【中文标题】如何在 laravel 中连接两个表?【英文标题】:How to join two tables in laravel? 【发布时间】: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 上循环或选择一个。这就是我所说的可能需要对关系和集合做一点研究的意思。 【参考方案1】:

假设您的用户模型中有这种关系。

public function transactions() 
  return $this->hasMany('App\Transaction', 'user_id');

在你的交易模型中

public function user() 
  return $this->belongsTo('App\User', 'user_id');

现在,将用户连同他们的交易一起获取

$users = User::with('transactions')->get();

如果你想获取与用户内联的交易

 $data = Transaction::with('user')->get();

 $transactions = collect($data)->map(function ($transaction)
    return [
        'id' => $transaction->id,
        'name' => $transaction->user->name,
        'total' => $transaction->total,
    ];
);

【讨论】:

感谢您的解决方案。但不幸的是,显示所有用户的交易仍然出错 您只想要交易吗?不是用户进行交易? 当我尝试在 Postman 中运行时,它显示 500Internal Server Error 它没有在 Postman API 中打印数据 500 ?现在,你有事务模型了吗? 其实我想打印所有用户的姓名和交易。在 Postman 中,数据应如下所示: "transaction": [ "id": 1, "name": "Adam", "total": "$4.00" , "id": 1, "name": "Ariana", "total": "$12.00" ]

以上是关于如何在 laravel 中连接两个表?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 多表连接:如何连接两个包含所有列的表,但一列除外

如何在 Laravel 中连接两个属性后将值搜索到数据库中

如何在laravel eloquent中为左连接表起别名

如何在laravel 5.4中进行左连接

如何在 Laravel 中将连接结果作为对象数组获取?

如何在 Laravel 中组合两个数据透视表?