Doctrine&Symfony-来自自定义查询的无水化数据

问题描述 投票:1回答:1

下午好,

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

问题是,即使我有Host&Page [](集合),查询也会为此实体返回空值。

这是我的实体([delboy1978uk提问后的[EDIT]:]

/**
 * @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提问后,[EDIT]:]

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方法返回Host&Page [](集合)。

php symfony doctrine-orm
1个回答
0
投票

感谢您的帮助。

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

SELECT w, h, p
FROM App\Entity\Website w
LEFT JOIN w.host h
LEFT JOIN w.pages p
© www.soinside.com 2019 - 2024. All rights reserved.