Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
делаю отношение моделей через Eloquent ORM.
Допустим есть 2 модели юзеры и информация о них (2 разные таблицы)
делаю жадную загрузку по принципу
public function getUsers($where = null)
{
return $this->user_rep->with('companies', 'userInformation')->all($where);
}
и все работает прекрасно.
метод all() в репозитории
public function all($where = FALSE, $columns = array('*'))
{
$builder = $this->model;
if (is_array($where)) {
return $builder->where($where)->get($columns);
}
return $builder->get($columns);
}
выбирает соответственно модель user и все отношения с ней.
но вот возникла проблема. хочу сделать выборку по условию where. если это сама таблица юзер то все ок, но елси хочу выбрать из связанной таблицы то выдает конечно ошибку.
как правильно в таком построении сделать выборку из связанных моделей?
Не в сети
есть join в конструкторах, есть WhereHas() я читала. но не могу привязать это все воедино. и как лучше использовать? join как-то избыточен получается если есть with с отношениями...
Не в сети
есть join в конструкторах, есть WhereHas() я читала. но не могу привязать это все воедино. и как лучше использовать? join как-то избыточен получается если есть with с отношениями...
Плохой репозиторий...
$query->where()->whereHas()->where()->limit()->where(function($q) {$q->where()->orWhere()})
Методы билдера можно чейнить (chain) как угодно.
Формироваться запрос будет только в момент вызова ->get() (метод ->get() иногда вызывается неявно).
Изменено covobo (14.03.2018 15:49:50)
Не в сети
Плохой репозиторий...
что вы имеете в виду? не совсем Вас поняла(
я хочу чтобы методы были как можно более универсальны для любой модели и любых отношений с ней. и соотвественно и выборки.
Изменено Yuliya (14.03.2018 15:54:59)
Не в сети
что вы имеете в виду? не совсем Вас поняла(
Это большая тема для обсуждения.
я хочу чтобы методы были как можно более универсальны для любой модели и любых отношений с ней. и соотвественно и выборки.
Когда будете "спотыкаться" об собственный репозиторий (например текущая проблема), тогда и придет осознание, что в нем не так.
Вопрос практики.
Не в сети
Вы имеете в виду, что нужно разделить все методы максимально, чтобы они не были привязаны друг к другу и собирать в зависимости от потребностей?по типу вынести отдельно where() и whereHas() и тд и собирать билдер как захочется?
практика это хорошо, но документация не дает таких знаний)) а хочется двигаться в правильную сторону
Не в сети
Билдер и так можно собирать как хочется.
А у вас какие-то сложности с репозиторием.
Вот что я имею в виду, вы добавили проблемы. Здесь что-то не так
Как сделать лучше - большая тема. Посмотрите в сторону готовых репозиториев, на гитхабе они есть. Может что понравится.
Изменено covobo (14.03.2018 19:25:08)
Не в сети
привет!
репозитории нужно использовать тогда, когда очень хорошо понимаешь зачем ты их используешь. этот паттерн в частности используются в высоконагруженных проектах, и позволяет свапнуть реализацию. например если ты хочешь иметь возможность легко переключаться между Eloquent и, не знаю, файловой системой для выборки данных. тогда ты абстрагируешь логики, необходимые для реализации того и того подхода в свои репозитории, и через интерфейс резолвишь ту, что тебе нужна в данных момент.
Я могу предположить что ничего этого в твоем проекте не намечается => выпиливай нахрен все репозитории и не усложняй себе жизнь. используй Eloquent, тем более что уж он так прекрасен.
// даст тебе выборку юзеров по условию в связной таблице
User::whereHas('userInformation', function ($query) {
$query->where('field', 'value');
})->get();
// даст тебе всех юзеров с подгрузкой только той информации, где она удовлятворяет вложенным условиям.
User::with(['userInformation' => function ($query) {
$query->where('field', 'value');
}])->get();
напиши конкретно что хочешь сделать и составим точный запрос
Изменено code_bright_anywhere (14.03.2018 21:36:06)
Пишу бэкенд для своего мобильного приложения, делюсь с миром, заходите посмотреть, много всего интересного https://youtu.be/C5M6-ycJ5gs
Не в сети
напиши конкретно что хочешь сделать и составим точный запрос
хочу во-первых разобраться с хорошими практиками построения приложения сразу)и я уже поняла, что усложняю себе жизнь видимо)
Задача такая, что во-вторых хочу вынести реализации методов из контроллеров. и тут вопрос- выборки лучше тогда где делать, в моделях? или в каких-то других классах? в-третьих задача фильтров. т е на 1 метод будут приходить разные данные по фильтрации, поля в разных таблицах (потому и надо связать условия), фильтры должны накладываться, т.е. я могу выбрать например по логину(таблица user) и по паспортным данным юзера(которые в таблице userInformation).
и тогда у меня вопрос,если не использовать репозитории, то похожие методы-выборки и фильтры других разделов,связанные с другими моделями,тоже нужно реализовывать в их моделях? допустим тут я выбираю всех юзеров, а где-то выбираю все компании модели Company. это будет разная реализация похожи методов в их собственных моделях или где-то еще?))
как могла пояснила))сильно не ругайте!)
Не в сети
Пишу бэкенд для своего мобильного приложения, делюсь с миром, заходите посмотреть, много всего интересного https://youtu.be/C5M6-ycJ5gs
Не в сети
разобраться
спасибо, обязательно посмотрю!
Не в сети
Страницы 1