Проверить существует ли связанная сущность doctrine в twig?

Корневая сущеность имееет

/**
     * @var \Backend\SalesBundle\Entity\SalesOrder
     *
     * @ORM\OneToOne(targetEntity="Backend\CatalogBundle\Entity\CatalogProduct")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="product_id", referencedColumnName="product_id")
     * })
     */
    private $product;

Когда в twig вызывается - все ок и для случая, когда продукт есть в базе и когда продукта в базе уже нет
{{ item.product.productId }}
Но если сделать вызов ниже, то произвойдет обращение БД и doctrine сгенерирует ошибку "entitty doen't exist", если связанного product в базе нет.
{{ item.product.name }}
Вопрос, как сделать код twig таким, чтобы он нормально реагировал на отвутсвие записи в БД?
  • Вопрос задан
  • 2550 просмотров
Решения вопроса 1
@tsifra Автор вопроса
Перекопав инет выяснилось, что элегантного решения, судя по всему не существует.

В итоге пишлось сделать так:

public function getProduct()
    {
        try {
            $sku = $this->product->getSku();
        } catch (\Doctrine\ORM\EntityNotFoundException $e) {
            return null;
        }
        
        return $this->product;
    }


Хотя это приводит к проблемам другого рода в случае необходимости получения poductId {{ item.product.productId }}

Вот еще вариант. Установить fetch="EAGER" тогда сразу после инициализации корневой сущности в product будет попадать null

/**
     * @var \Backend\SalesBundle\Entity\SalesOrder
     *
     * @ORM\ManyToOne(targetEntity="Backend\CatalogBundle\Entity\CatalogProduct", fetch="EAGER")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="product_id", referencedColumnName="product_id")
     * })
     */
    private $product;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
сделай проверку на if item.product
Ответ написан
Ваш ответ на вопрос

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

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