Doctrine & Symfony - 没有来自自定义查询的水合数据

Doctrine & Symfony - No hydratation data from custom query

下午好,

我尝试使用一个 DQL 查询获取特定存储库中的所有数据。

问题是,即使我有 Host & Page[](集合),此实体的查询 returns 空值。

这是我的实体(在 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;
}

这是我查找配置的方法(在 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();
     }
}

我希望从 WebsiteRepository 中的 findConfiguration 方法 returns Host & Page[](集合)。

感谢您的帮助。

这是在 WebsiteRepository 的 findConfiguration 方法中使用 findConfiguration 方法的解决方案:

SELECT w, h, p
FROM App\Entity\Website w
LEFT JOIN w.host h
LEFT JOIN w.pages p