如何让没有原生查询的json字段找到doctrine

Dav*_*vid 5 php json doctrine-orm

jsondoctrine 2(在MySQL数据库中)使用列.实际上,我json使用原生查询进行搜索

$rsm = new ResultSetMappingBuilder($entityManager);
$rsm->addRootEntityFromClassMetadata(\blabla\MyObject::class, 'o');
$query = $entityManager->createNativeQuery('select o.* from my_objects o where json_extract(jsonData, "$.test.key1")= "value1"', $rsm); 
//jsonData column contains {"test": {"key1" : "value1"}}
$result = $query->getResult();
Run Code Online (Sandbox Code Playgroud)

没有本机查询机制,是否可以像这样进行查询?(像findBy)

在此先感谢您的帮助 ;)

Dav*_*vid 8

我解决了我的问题. 我找到了DQL的这个扩展.

$queryBuilder = $entityManager->createQueryBuilder();
$query = $queryBuilder
    ->select("o")
    ->from(\bla\bla\MyObject::class, "o")
    ->where("JSON_EXTRACT(o.jsonData, :jsonPath) = :value ")
    ->setParameter('jsonPath', '$.test.key1')
    ->setParameter('value', 'value1')
    ->getQuery();

$co = $query->getResult();
Run Code Online (Sandbox Code Playgroud)


skr*_*zek 6

我刚刚面临同样的问题,但不想安装额外的扩展。原始问题的代码片段只需要进行一些小的改进即可工作:

$rsm = $this->createResultSetMappingBuilder('n');
$rsm->addRootEntityFromClassMetadata(MyObject::class, 'n');
$rawQuery = sprintf('SELECT %s FROM my_objects n WHERE JSON_EXTRACT(current_state, \'$.processing\')', $rsm->generateSelectClause());
$query = $this->_em->createNativeQuery($rawQuery, $rsm);
return $query->getResult();
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力。