Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Кто знает как реализовать 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)
Не в сети
Все верно.
Если в запросе ->get() поменять на ->toSql() и вывести результат то можно получить сам sql запрос и посмотреть что ли что нужно.
В порядке любопытства - почему не Eloquent и связи?
Не в сети
Если через них оптимальней делать - буду благодарен куску кода. Раньше работал только с mysqli вообще и просто не возникало потребности использовать что-то другое.
Не в сети
Просто удобнее и быстрее Правда должны быть созданы модели (это одна артизан-команда из консоли) и указаны отношения в них
$articles = Article::with('categories')->get();
foreach($articles as $article) {
echo $article->title . ' ' . $article->categories->first()->name
}
Но тут лучше почитать документацию https://laravel.ru/docs/v5/eloquent
Не в сети
Спасибо, интересно, уже читаю ман.
Не в сети
небольшое замечание – джойны и группировки лучше не делать на моделях – им от этого плоховато становится. кроме того с джойнами в сочетании с отношениями один-ко-многим и многие-ко-многим не будет работать пагинация. релейшены в моделях и жадная загрузка по скорости не уступают джойнам, но зато работает весь нужный фунционал – при этом вместо джойна, связанные модели выбираются отдельным запросом по айдишникам (то есть по первичному ключу). это очень быстрый запрос. фактически элоквент выполняет джойн на уровне моделей и ты получаешь тот же результат, но уже в подготовленном виде. и пагинация работает как положено
в редких случаях бывает нужно оптимизировать отдельный запрос джойном и группировкой – в этом случае не используй модели вообще, используй query builder и обрабатывай сырые данные – для оптимизации «узких» мест это вполне допустимо
и не забывай о том, что можно всегда проверить какие именно запросы генерируют модели и построитель – есть замечательный debugbar для ларавеля, устанавливается с полпинка и помогает в разработке – колоссально!
Изменено constb (07.02.2017 05:34:40)
Не в сети
Страницы 1