Тройное отношение QueryBuilder Symfony (какого черта я делаю?) - PullRequest
0 голосов
/ 13 октября 2019

Позвольте мне объяснить, как я делаю вещи (может быть, не самый лучший способ, кстати). Я хочу присоединиться к своей сущности StoreSchedule (которая содержит тройное отношение: store (где я храню всю информацию об адресе, имени, изображении моих магазинов), дни (7 дней недели) и расписания (только строки типа '09: 00-22: 00 ').

Чтобы объединить эти 3 сущности, я создал StoreSchedule, который имеет тройное отношение, где я пересекаю 3 информации. Может быть, я не очень хорошо объясняю, позвольте мне показать вам некоторыеэкраны.

Что я уже пытался сделать с моим QueryBuilder в своем хранилище:

https://imgur.com/a/bE52iBH

Как я структурировал вещи в своей таблице StoreSchedule:

https://imgur.com/a/6m7YkhI

Таблица моего расписания:

https://imgur.com/a/75bRriS

Таблица дней содержит 7 дней недели. Может быть, это очевидно, а может и нет.

Так вот в чем дело, я не могу понять, как сделать то, что мне нужно: запрос, который получает весь контент из Store и присоединяется к StoreSchedule, где ID = Store.ID

Я хочу получить дни и расписаниес идентификатором из магазина.

МожетЯ делаю это с помощью построителя запросов?

Нужно ли модифицировать мою базу данных? У меня хорошие отношения?

С наилучшими пожеланиями!

ps: надеюсь, я достаточно ясно дал понять ...

1 Ответ

0 голосов
/ 13 октября 2019

Ты делаешь это слишком сложным. Вы можете очистить таблицу дней И StoreSchedule. Просто установите отношение «многие к одному» между магазином и (магазином) расписанием. Добавьте столбец «день» в таблицу расписания. Короткое целое число будет делать, если вы сохраните номер дня. Смотрите php's date date .

Для вашего запроса (первая ссылка) вам не понадобится это предложение WHERE. Doctrine автоматически присоединится к соответствующим данным.

    public function getAllContentStoreAndSchedule()
    {
        return $this->createQueryBuilder('st')
            ->leftJoin('st.schedule', 'sc')
            ->addSelect('sc')
            ->orderBy('st.name', 'ASC')
            ->addOrderBy('sc.day', 'ASC')
            ->getQuery()
        ;
    }
...