Как объединить две таблицы в laravel? - PullRequest
2 голосов
/ 25 января 2020

Я новичок в 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 Ответ

1 голос
/ 25 января 2020

Предполагая, что у вас есть эти отношения в вашей модели пользователя.

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