教义:从原始 SQL 中水合模型

Posted

技术标签:

【中文标题】教义:从原始 SQL 中水合模型【英文标题】:Doctrine: Hydrate models from raw SQL 【发布时间】:2019-02-07 18:19:17 【问题描述】:

我有以下自定义查询。我知道它很简单,所以它也可以用作 DQL,但我也有更复杂的。但我想知道方法,即使是更复杂的查询如何做到这一点。

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

当然有Job 模型。

我想要什么:

Job 类的实例数组,使用原始 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( 
      ...
    

【问题讨论】:

我不清楚你在这里问我们什么!也许是你向我们展示了这会产生什么,然后说出你真正想要产生什么 要改善您的 SO 体验,请阅读如何询问 On Topic question、Question Check list 和 the perfect question 以及如何创建 Minimal, Complete and Verifiable Example 我写下了我想要的,但我会更清楚。 【参考方案1】:

找到了!通过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();

【讨论】:

以上是关于教义:从原始 SQL 中水合模型的主要内容,如果未能解决你的问题,请参考以下文章

教义(在 Ubuntu 上):啥命令从数据库生成模型而不删除现有模型?(我添加新表所以我想更新模型)

教义 SQL/表生成失败

教义:将模型值设置为数组

Google发布支持训练更小更快的AI模型

了解 MVC 中的 ORM 模型

使用原始 SQL 查询绑定复杂模型实体?