Привет, у меня есть следующая таблица:
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;
}
Любая идея?
добавлено в вопрос
Просто добавьте соединение к корневому объекту в построителе запросов и выберите оба объекта.
Я думаю, вы должны понять идею ORM. Вы пытаетесь получить строки из базы данных и ожидать, что она будет такой же, как при создании SQL-запроса вручную. Вместо этого Doctrine извлекает строки и возвращает объекты, а не просто текст.
Я проверяю с помощью var_dump ($ urls), и root не появляется, но при выполнении php bin / console doctrine: query: sql появляется




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