Ond*_*ták 25 php symfony doctrine-orm
我需要使用几个联合和子查询创建本机SQL查询.它看起来大致如下:
SELECT res.id, COUNT(*) as count_ids
FROM (
SELECT a.id FROM ... a WHERE ... LIKE ('%:param%')
UNION ALL
SELECT b.id FROM ... b WHERE ... LIKE ('%:param%')
UNION ALL
...
) res
GROUP BY res.id
ORDER BY count_ids asc
Run Code Online (Sandbox Code Playgroud)
结果将不匹配我在我的应用程序中使用的任何实体.是否可以ResultSetMapping使用"匿名"对象创建?或者至少可以创建一个实体,下次我更新架构时不会创建表,所以我可以将结果映射到它?
或者是否有任何其他Doctrine友好的方式来处理这样的查询?但是,对数据库进行更改是不可能的,因为我正在处理无法触及的遗留内容.如果我在数据库方面做了所有事情,并且不涉及大量PHP,我也非常喜欢.
Pro*_*tic 40
您是否特别需要将结果映射到域对象?如果没有,您可以使用DBAL创建一个普通的旧查询,它将返回一个数组,详见Symfony2 cookbook和Doctrine DBAL文档:
$conn = $this->container->get('database_connection');
$sql = 'SELECT res.id, COUNT(*)...';
$rows = $conn->query($sql);
Run Code Online (Sandbox Code Playgroud)
小智 10
使用ResultSetMapping的addScalarResult方法
$rsm = new ResultSetMapping();
$rsm->addScalarResult('cnt', 'cnt');
$rsm->addScalarResult('id', 'id');
$query = $this->em->createNativeQuery('SELECT count(*) AS cnt, id_column as id FROM your_table group by id', $rsm);
$result = $query->getResult();
var_dump($result);
Run Code Online (Sandbox Code Playgroud)
结果数组:
array (size=1)
0 =>
array (size=2)
'cnt' => int 1
'id' => int 15
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23350 次 |
| 最近记录: |