Вот мои структуры таблиц:
// tickets
+----+------------+----------------------+--------+---------+
| id | subject | content | closed | user_id |
+----+------------+----------------------+--------+---------+
| 1 | subject1 | question1 | 0 | 123 |
+----+------------+----------------------+--------+---------+
// answers
+----+----------------------+---------+-----------+
| id | content | user_id | ticket_id |
+----+----------------------+---------+-----------+
| 1 | answer1 | 123 | 1 |
| 2 | answer2 | 456 | 1 |
+----+----------------------+---------+-----------+
Теперь мне нужно получить билет со всеми ответами. Я могу сделать это, используя чистый SQL, вот так:
SELECT t.*, a.*
FROM tickets t
LEFT JOIN answers a
ON t.id = a.ticket_id
WHERE t.id = ?
Теперь я использую Laravel, и я хочу сделать это, используя класс with()(однако не уверен, что это возможно). Есть идеи, какие изменения я должен внести в модели для этого?
Заметил, что я могу получить просто билет в Laravel вот так:
$ticket = Tickets::where('id', $request->id)->get();






Сначала создайте отношение имеет много() в своем классе модели Tickets.
public function answers()
{
return $this->hasMany(Answers::class, 'ticket_id', 'id');
}
А затем в запросе вашего контроллера
$tickets = Tickets::with('answers')->where('id', $request->id)->get();
это неплохо, правда? Я даже не стал искать другое решение.
Я думаю, он об этом говорит: $ticket = Tickets->where('id', $request->id); $answers = $ticket->answers;
потребуется дополнительный запрос n+1
Ах, понятно, спасибо. Также я предполагаю, что есть другой подход (кроме
with()). Вы хоть представляете, что это? (чтобы присвоить ответы другой переменной)