如何在laravel中联接两个表?

时间:2020-01-25 17:11:59

标签: php laravel eloquent left-join

我是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,
    ]);
}

我想在邮递员中打印所有用户的姓名和所有交易。我设法打印了所有用户的姓名,但是当我尝试与事务表联接时,我遇到了一个错误。我已经尝试过如下所示的左联接方法:

$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中联接两个表?谢谢。

1 个答案:

答案 0 :(得分: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,
    ];
});