Doctrine & Symfony - Нет данных гидратации из пользовательского запроса - PullRequest
2 голосов
/ 07 февраля 2020

Добрый день,

Я пытаюсь получить все данные одним DQL-запросом в определенном c репозитории.

Проблема в том, что даже если у меня есть Host & Page [] (collection), запрос возвращает нулевые значения для этих объектов.

Это мои объекты ([EDIT] после вопроса delboy1978uk ):

/**
 * @ORM\Entity(repositoryClass="App\Repository\WebsiteRepository")
 */
class Website 
{
    /**
     * @var int|null $id
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string $domainName
     *
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $domainName;

    /**
     * @var string $language
     *
     * @ORM\Column(type="string", length=2, nullable=false)
     */
    private $language;

    /**
     * @var Host $host
     *
     * @ORM\ManyToOne(targetEntity="App\Entity\Host", cascade={"persist"})
     * @ORM\JoinColumn(name="host_id", referencedColumnName="id", nullable=false)
     */
    private $host;

    /**
     * @var ArrayCollection $pages
     *
     * @ORM\OneToMany(targetEntity="App\Entity\Page", mappedBy="website", cascade={"persist"})
     */
    private $pages;

    /**
     * Website constructor.
     */
    public function __construct()
    {
        $this->pages = new ArrayCollection();
    }
}

/**
 * @ORM\Entity(repositoryClass="App\Repository\HostRepository")
 */
class Host
{
    /**
     * @var int|null $id
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string|null
     * 
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $legalName;

    /**
     * @var string|null
     * 
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $address;

    /**
     * @var string|null
     *
     * @ORM\Column(type="string", length=15, nullable=false)
     */
    private $phoneNumber;
}

/**
 * @ORM\Entity(repositoryClass="App\Repository\PageRepository")
 */
class Page
{
    /**
     * @var int|null $id
     *
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string|null $title
     * 
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $title;

    /**
     * @var string|null $route
     * 
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $route;

    /**
     * @var string|null $template
     *
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $template;

    /**
     * @var Website $website
     *
     * @ORM\ManyToOne(targetEntity="App\Entity\Website", inversedBy="pages")
     */
    private $website;
}

Это мой метод поиска конфигурации ([EDIT] после вопроса delboy1978uk):

class WebsiteRepository extends ServiceEntityRepository
{
    /**
     * WebsiteRepository constructor.
     *
     * @param ManagerRegistry $registry
     */
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Website::class);
    }

    public function findConfiguration(): array
    {
        return $this->getEntityManager()->createQuery(
            'SELECT w
             FROM App\Entity\Website w
             JOIN w.host h
             LEFT JOIN w.pages p'
        )->getResult();
     }
}

Я ожидаю возврата Host & Page [] (collection) из Метод findConfiguration в WebsiteRepository.

1 Ответ

0 голосов
/ 13 февраля 2020

Спасибо за вашу помощь.

Это решение с методом findConfiguration в WebsiteRepository для метода findConfiguration:

SELECT w, h, p
FROM App\Entity\Website w
LEFT JOIN w.host h
LEFT JOIN w.pages p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...