Добрый день.
Периодически пользуюсь то связями, то джоинами. И вот хочу уже выбрать что-то одно для дальнейших работ. Но не знаю что эффективнее и быстрее. Цель как обычно - оптимизация БД, дабы проект открывался шустрее, пусть даже на долю секунды.
Итак. Разберем самый частый пример с книгой и автором. Есть таблица с книгами, есть таблица с авторами. Связываются так: в таблице с книгами у каждой книги есть author_id. Можно сделать связь:
public function author() {
return $this->belongsTo(User::class);
}
А можно использовать left join:
SELECT books.*, authors.name as author_name FROM books
LEFT JOIN authors
ON books.author_id = authors.id
В первом случае мы получаем автора так:
$books->author;
Во втором случае:
$books->author_name;
В случае с left join, конечно, придется дописывать лишнее в sql запрос, зато одним запросом сразу вытащим все данные. В случае же со связями, насколько я понимаю, используется такая вещь:
$books = "SELECT * FROM books LIMIT 1";
$author = "SELECT name FROM authors WHERE id = " . $books->author_id;
То есть уже 2 запроса, вместо одного. Правильно я понимаю, или там какой-то другой метод получения автора для книги?
Я просто еще подумал, а что если выводить через цикл все книги, получается такая конструкция будет:
foreach($books as $book) {
echo $book->name . '<br>';
echo $book->author;
}
Это же еще больше запросов из ничего. Не целесообразнее ли использовать left join?
Спасибо!