@symnoob

Может кто помочь с SQL DQL?

Всем Привет,

помогите пожалуйста с sql/dql, есть две таблицы / энтити.

Мне нужно достать все данные из artikel.art_text, при условии что art.id =3

если связи с "artikel.art" нет, то в полях которые пришли из "artikel.art" должны стоять null, но приэтом должны выводиться все поля из artikel.art_text.

надеюсь что понятно что я хочу сделать...

на данный момент выводится только одна страка с данными:
SELECT * FROM artikel.art_text txt
LEFT JOIN artikel.art art ON txt.art_id = art.id

WHERE art.id =3
  • Вопрос задан
  • 896 просмотров
Решения вопроса 1
1) Маппинг Доктрины - для больших проектов плохая вещь, ибо работает не всегда правильно. Поэтому лучше работать с композитными ключами.

2) @ORM\GeneratedValue() - вот это тоже не лучшая практика, потом замучаешься шардировать проект и менять схему таблицы. Обычно проекты на Symfony - это не бложики (но это так на будущее)

3) В общем, все выглядит примерно так:

В репозитории родительского класса пишем метод, который выглядит как-то так. Там же пишем Joint к тому классу, что тебе нужно - делаем маппинг и через where / andWhere добавляем нужные тебе условия выборки. Это пример на innerJoin, на leftJoin будет выглядеть также, просто метод другой.

public function GetUsers(int $offset = 0, int $limit = 1000): array
    {
        $users = $this->createQueryBuilder('a')
            ->select('a.email')
            ->join(Secret::class, 's', Join::WITH, 'a.site = s.siteId')
            ->where('s.active = :active')
            ->setParameter('active', 1)
            ->setFirstResult($offset)
            ->setMaxResults($limit)
            ->getQuery()
            ->getScalarResult();

        return $users;
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы