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
下午好,
我尝试使用一个 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