Laravel по-русски

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

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

#1 14.03.2018 13:21:47

выборка из связанной таблицы

делаю отношение моделей через 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. если это сама таблица юзер то все ок, но елси хочу выбрать из связанной таблицы то выдает конечно ошибку.
как правильно в таком построении сделать выборку из связанных моделей?

Не в сети

#2 14.03.2018 15:41:12

Re: выборка из связанной таблицы

есть join в конструкторах, есть WhereHas() я читала. но не могу привязать это все воедино. и как лучше использовать? join как-то избыточен получается если есть with с отношениями...

Не в сети

#3 14.03.2018 15:48:51

Re: выборка из связанной таблицы

есть 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)

Не в сети

#4 14.03.2018 15:52:04

Re: выборка из связанной таблицы

Плохой репозиторий...

что вы имеете в виду? не совсем Вас поняла(
я хочу чтобы методы были как можно более универсальны для любой модели и любых отношений с ней. и соотвественно и выборки.

Изменено Yuliya (14.03.2018 15:54:59)

Не в сети

#5 14.03.2018 18:26:23

Re: выборка из связанной таблицы

что вы имеете в виду? не совсем Вас поняла(

Это большая тема для обсуждения.

я хочу чтобы методы были как можно более универсальны для любой модели и любых отношений с ней. и соотвественно и выборки.

Когда будете "спотыкаться" об собственный репозиторий (например текущая проблема), тогда и придет осознание, что в нем не так.
Вопрос практики.

Не в сети

#6 14.03.2018 19:16:47

Re: выборка из связанной таблицы

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

Не в сети

#7 14.03.2018 19:24:28

Re: выборка из связанной таблицы

Билдер и так можно собирать как хочется.
А у вас какие-то сложности с репозиторием.

Вот что я имею в виду, вы добавили проблемы. Здесь что-то не так smile

Как сделать лучше - большая тема. Посмотрите в сторону готовых репозиториев, на гитхабе они есть. Может что понравится.

Изменено covobo (14.03.2018 19:25:08)

Не в сети

#8 14.03.2018 21:35:31

Re: выборка из связанной таблицы

привет!

репозитории нужно использовать тогда, когда очень хорошо понимаешь зачем ты их используешь. этот паттерн в частности используются в высоконагруженных проектах, и позволяет свапнуть реализацию. например если ты хочешь иметь возможность легко переключаться между 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

Не в сети

#9 14.03.2018 21:44:48

Re: выборка из связанной таблицы

напиши конкретно что хочешь сделать и составим точный запрос

хочу во-первых разобраться с хорошими практиками построения приложения сразу)и я уже поняла, что усложняю себе жизнь видимо)
Задача такая, что во-вторых хочу вынести реализации методов из контроллеров. и тут вопрос- выборки лучше тогда где делать, в моделях? или в каких-то других классах? в-третьих задача фильтров. т е на 1 метод будут приходить разные данные по фильтрации, поля в разных таблицах (потому и надо связать условия), фильтры должны накладываться, т.е. я могу выбрать например по логину(таблица user) и по паспортным данным юзера(которые в таблице userInformation).
и тогда у меня вопрос,если не использовать репозитории, то похожие методы-выборки и фильтры других разделов,связанные с другими моделями,тоже нужно реализовывать в их моделях? допустим тут я выбираю всех юзеров, а где-то выбираю все компании модели Company. это будет разная реализация похожи методов в их собственных моделях или где-то еще?))
как могла пояснила))сильно не ругайте!)

Не в сети

#10 19.03.2018 21:32:33

Re: выборка из связанной таблицы

Yuliya

записал видео на эту тему, должно помочь разобраться

https://youtu.be/E7P4wf0hPwM


Пишу бэкенд для своего мобильного приложения, делюсь с миром, заходите посмотреть, много всего интересного https://youtu.be/C5M6-ycJ5gs

Не в сети

#11 19.03.2018 22:37:27

Re: выборка из связанной таблицы

разобраться

спасибо, обязательно посмотрю!

Не в сети

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