Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 05.02.2017 22:12:29

Join в Laravel 5.4

Кто знает как реализовать join в новой Laravel 5.4 ? Ангицкую документацию читал, но увы, не далось. Сырые запросы использовать не хочу, т.к. хочетцо красиво чтоб было, да и знать полезно будет. Заранее благодарен.

Не в сети

#2 06.02.2017 05:20:18

Re: Join в Laravel 5.4

Слишком общий вопрос. На него можно ответить только "так как в доках написано".

Дай чистый запрос как минимум.

Не в сети

#3 06.02.2017 12:33:00

Re: Join в Laravel 5.4

Вот собственно сырой запрос:

SELECT articles.id,
       articles.title,
       articles.text,
       categories.cat_title
FROM articles
LEFT JOIN `categories` ON articles.cat_id = categories.id
ORDER BY articles.id

А вот как я это реализовал в Laravel 5.4, но не уверен что верно, хоть и работает как ожидается:

$articles = Blog::query()->join('categories', 'articles.cat_id', '=', 'categories.id')
                                  ->select('articles.id', 'articles.title', 'articles.text', 'categories.cat_title')
                                  ->orderBy('articles.id')
                                  ->get();

Буду благодарен если покритикуете и поправите.

Изменено wonalive (06.02.2017 12:33:28)

Не в сети

#4 06.02.2017 14:13:08

Re: Join в Laravel 5.4

Все верно.

Если в запросе ->get() поменять на ->toSql() и вывести результат то можно получить сам sql запрос и посмотреть что ли что нужно.

В  порядке любопытства - почему не Eloquent и связи?

Не в сети

#5 06.02.2017 18:17:58

Re: Join в Laravel 5.4

Если через них оптимальней делать - буду благодарен куску кода. Раньше работал только с mysqli вообще и просто не возникало потребности использовать что-то другое.

Не в сети

#6 06.02.2017 19:51:50

Re: Join в Laravel 5.4

Просто удобнее и быстрее smile Правда должны быть созданы модели (это одна артизан-команда из консоли) и указаны отношения в них

$articles = Article::with('categories')->get();

foreach($articles as $article) {
  echo $article->title . ' ' . $article->categories->first()->name
}

Но тут лучше почитать документацию https://laravel.ru/docs/v5/eloquent

Не в сети

#7 06.02.2017 20:19:43

Re: Join в Laravel 5.4

Спасибо, интересно, уже читаю ман.

Не в сети

#8 07.02.2017 05:33:29

Re: Join в Laravel 5.4

небольшое замечание – джойны и группировки лучше не делать на моделях – им от этого плоховато становится. кроме того с джойнами в сочетании с отношениями один-ко-многим и многие-ко-многим не будет работать пагинация. релейшены в моделях и жадная загрузка по скорости не уступают джойнам, но зато работает весь нужный фунционал – при этом вместо джойна, связанные модели выбираются отдельным запросом по айдишникам (то есть по первичному ключу). это очень быстрый запрос. фактически элоквент выполняет джойн на уровне моделей и ты получаешь тот же результат, но уже в подготовленном виде. и пагинация работает как положено

в редких случаях бывает нужно оптимизировать отдельный запрос джойном и группировкой – в этом случае не используй модели вообще, используй query builder и обрабатывай сырые данные – для оптимизации «узких» мест это вполне допустимо

и не забывай о том, что можно всегда проверить какие именно запросы генерируют модели и построитель – есть замечательный debugbar для ларавеля, устанавливается с полпинка и помогает в разработке – колоссально!

Изменено constb (07.02.2017 05:34:40)

Не в сети

Подвал раздела