首页 > 解决方案 > 教义不获取外键

问题描述

Helo 我有下一张桌子:

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;
}

任何想法?

标签: symfonydoctrinesymfony-3.3symfony-3.4

解决方案


我解决了 add ->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);

推荐阅读