原理:从原始SQL中水化模型

时间:2018-09-02 12:35:30

标签: php doctrine-orm doctrine-dbal

我有以下自定义查询。我知道它很简单,因此也可以用作DQL,但我也有更复杂的代码。但是我想知道方法,即使是更复杂的查询也要怎么做。

select j.*
from `shop`.`jobs` j
-- 2 joins
where j.`active` = true 
order by j.`priority` desc, j.`created` asc 

肯定有一个Job模型。

我想要的:

使用原始sql,来自Job类的实例数组。像这样:

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( {
      ...
    }
}

1 个答案:

答案 0 :(得分:0)

找到了!通过EntityManager的createNativeQuery函数。对于RSM,我需要使用ResultSetMappingBuilder类。

$rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->getEntitiyManager());
$rsm->addRootEntityFromClassMetadata(\Path\To\Model::class, 'alias');

$nativeQuery = $this->getEntitiyManager()->createNativeQuery('-- query--', $rsm);

$nativeQuery->getResult();