Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть запрос
select `b`.`id`,`b`.`name`, `c`.`count`
from `books`as`a`
join `book_genres`as`b`on`b`.`id`=`a`.`genre`
join `bookremains`as`c`on`c`.`book`=`a`.`id`
where `a`.`visible_site`=1 and `c`.`count`>100
group by `a`.`genre`
Подскажите как это написать на Eloquent. Возможно я делаю что то не правильно, подскажите как это реализовать правильно.
Этот запрос выводит меню жанров, проверяя чтобы в жанре была хотя бы одна книга с остатком больше 100 и с включенной видимостью.
Начал копать with, понял что таблица подключается не через join, а отдельными запросом подтягиваются все нужные элементы.
Попробовал hasWhere - он делает сложный запрос с вложенным select.
Спасибо
Написал такой вариант:
$genres = Book::join('book_genres', 'books.genre_id', '=', 'book_genres.id')
->join('bookremains', 'books.id', '=', 'bookremains.book_id')
->where('bookremains.count','>',100)
->where('books.visible_site', 1)
->groupBy('books.genre_id')
->select('book_genres.id as id', 'book_genres.name as name')
->get();
Все работает как нужно, только очень не нравится что приходится названия таблиц напрямую указывать.
Подскажите если кто знает вариант получше.
->getTable() от модели никак?
Не в сети
Спасибо, с названием таблицы вопрос полностью закрыт.
А по реализации, возможно кто нибудь подскажет более правильное решение.
Спасибо, с названием таблицы вопрос полностью закрыт.
А по реализации, возможно кто нибудь подскажет более правильное решение.
для грязного чтения есть смысл использовать left join - будешь видеть несущие записи без связей (колоки с null получишь, где жойны должны быть)
Не в сети
Страницы 1