Symfony + доктрина: выберите пункт, где не работают

0

Предложение, в котором не работает простой тип массива. Условие: cc.isActive =: active

return $qb->select('c')
        ->from('Win4uAdminBundle:ColorGammeCor', 'c')
        ->innerJoin('Win4uAdminBundle:Color', 'cc')
        ->where('c.type = :type')
        ->andWhere('cc.isActive = :active ')
        ->andWhere('c.gamme = :gamme_id')
        ->addGroupBy('c.colorExt')
        ->setParameter('type', $type)
        ->setParameter('active', 1)
        ->setParameter('gamme_id', $gammeId)
        ->getQuery()->getResult();

Здесь приведенное определение:

/**
 * @ORM\Column(name="is_active", type="simple_array", columnDefinition="TINYINT(1) NULL")
 */
private $isActive;

Если содержимое поля is_active равно null, этот запрос возвращает записи... почему? Я спрашиваю только is_active = 1

Большое спасибо

  • 0
    Вы пробовали отладку «запускаемого запроса» из профилировщика Symfony? Я не знаю, почему вы используете тип simple_array вместо логического.
Теги:
doctrine
doctrine2
symfony-2.3

1 ответ

1
Лучший ответ

Вы всегда можете отлаживать фактическую Doctrine SQL, вызывая выполнение $qb->getQuery()->getSQL() где $qb - ваш объект QueryBuilder, или просмотрев панель инструментов Symfony.

В коде есть две проблемы. Во-первых, определение поля $isActive неверно, оно должно быть логическим, а не простым_рассером:

/**
 * @ORM\Column(name="is_active", type="boolean")
 */
private $isActive;

Во-вторых, innerJoin должен указать отношение к Win4uAdminBundle:ColorGammeCor, поэтому он должен быть чем-то похожим на:

return $qb->select('c')
    ->from('Win4uAdminBundle:ColorGammeCor', 'c')
    ->innerJoin('c.color', 'cc')
  • 0
    Здравствуйте, исправление моего innerJoin и отладка с помощью -> getSQL () помогают мне решить мою проблему. Большое спасибо. Также использование «isActive» в качестве простого массива поможет мне использовать его в качестве флажка. Может быть ошибка новичка Symfony ... Так что спасибо, ребята

Ещё вопросы

Сообщество Overcoder
Наверх
Меню