Доктрина не получает иностранный ключ

Привет, у меня есть следующая таблица:

Urls, CREATE TABLE `Urls` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `root` int(11) DEFAULT NULL,
  `url` varchar(2000) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`),
  KEY `fk_Url_1_idx` (`root`),
  CONSTRAINT `fk_Url_1` FOREIGN KEY (`root`) REFERENCES `Enlaces` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

когда я выполняю следующий запрос, чтобы получить данные

$urls = $this->getDoctrine()->getManager()->getRepository('UserBundle:Urls')
            ->createQueryBuilder('e')
            ->select("e")
            ->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

Запрос выбирает все поля, кроме root.

Но при выполнении php bin/console doctrine:query:sql выбирается root

Исходный файл Urls.php:

    <?php

namespace UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Urls
 *
 * @ORM\Table(name = "Urls", uniqueConstraints = {@ORM\UniqueConstraint(name = "id_UNIQUE", columns = {"id"})}, indexes = {@ORM\Index(name = "fk_Url_1_idx"})
 * @ORM\Entity
 */
class Urls
{
    /**
     * @var string|null
     *
     * @ORM\Column(name = "url", type = "string", length=2000, nullable=true)
     */
    private $url;

    /**
     * @var int
     *
     * @ORM\Column(name = "id", type = "integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy = "IDENTITY")
     */
    private $id;

    /**
     * @var \UserBundle\Entity\Urls
     *
     * @ORM\ManyToOne(targetEntity = "UserBundle\Entity\Urls")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name = "root", referencedColumnName = "id")
     * })
     */
    private $root;
}

Любая идея?

Пожалуйста, добавьте модель сущности (UserBundle\Entity\Unlaces.php?) К вашему вопросу. Прочтите документацию Doctrine ORM и поймите разницу между DQL и SQL.

Stephan Vierkant 12.07.2018 12:31

добавлено в вопрос

Tlaloc-ES 12.07.2018 12:39

Просто добавьте соединение к корневому объекту в построителе запросов и выберите оба объекта.

Dimitris 12.07.2018 12:41

Я думаю, вы должны понять идею ORM. Вы пытаетесь получить строки из базы данных и ожидать, что она будет такой же, как при создании SQL-запроса вручную. Вместо этого Doctrine извлекает строки и возвращает объекты, а не просто текст.

Stephan Vierkant 12.07.2018 12:47

Я проверяю с помощью var_dump ($ urls), и root не появляется, но при выполнении php bin / console doctrine: query: sql появляется

Tlaloc-ES 12.07.2018 13:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
5
53
1

Ответы 1

Я решаю добавить -> setHint (\ Doctrine \ ORM \ Query :: HINT_INCLUDE_META_COLUMNS, true) для запроса.

$urls = $this->getDoctrine()->getManager()->getRepository('UserBundle:Urls')
            ->createQueryBuilder('e')
            ->select("e")
            ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true)
            ->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

Другие вопросы по теме