学说:来自原始 SQL 的水合物模型
Doctrine: Hydrate models from raw SQL
我有以下自定义查询。我知道它很简单,所以它也可以用作 DQL,但我也有更复杂的。但我想知道方法,即使是更复杂的查询也应该怎么做。
select j.*
from `shop`.`jobs` j
-- 2 joins
where j.`active` = true
order by j.`priority` desc, j.`created` asc
当然有 Job
模型。
我想要的:
来自 class 作业的实例数组,使用原始 sql。像这样:
array (6) {
[0] => Job#12 (8) {
...
}
[1] => Job#13 (8) {
...
}
[2] => Job#14 (8) {
...
}
[3] => Job#16 (8) {
...
}
[4] => Job#17 (8) {
...
}
[5] => Job#18 (8( {
...
}
}
找到了!通过 EntityManager 的 createNativeQuery 函数。对于 RSM,我需要使用 ResultSetMappingBuilder class.
$rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->getEntitiyManager());
$rsm->addRootEntityFromClassMetadata(\Path\To\Model::class, 'alias');
$nativeQuery = $this->getEntitiyManager()->createNativeQuery('-- query--', $rsm);
$nativeQuery->getResult();
我有以下自定义查询。我知道它很简单,所以它也可以用作 DQL,但我也有更复杂的。但我想知道方法,即使是更复杂的查询也应该怎么做。
select j.*
from `shop`.`jobs` j
-- 2 joins
where j.`active` = true
order by j.`priority` desc, j.`created` asc
当然有 Job
模型。
我想要的:
来自 class 作业的实例数组,使用原始 sql。像这样:
array (6) {
[0] => Job#12 (8) {
...
}
[1] => Job#13 (8) {
...
}
[2] => Job#14 (8) {
...
}
[3] => Job#16 (8) {
...
}
[4] => Job#17 (8) {
...
}
[5] => Job#18 (8( {
...
}
}
找到了!通过 EntityManager 的 createNativeQuery 函数。对于 RSM,我需要使用 ResultSetMappingBuilder class.
$rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->getEntitiyManager());
$rsm->addRootEntityFromClassMetadata(\Path\To\Model::class, 'alias');
$nativeQuery = $this->getEntitiyManager()->createNativeQuery('-- query--', $rsm);
$nativeQuery->getResult();