首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Doctrine2请求JSON类型字段中的键/值

用Doctrine2请求JSON类型字段中的键/值
EN

Stack Overflow用户
提问于 2018-03-14 14:09:29
回答 1查看 13K关注 0票数 9

我试图在symfony 3.4应用程序中,根据"json“类型列中特定键的值来检索实体(例如,通过存储库方法检索DQL请求)。看到了波斯特格里有一些可能的东西,但我没有找到任何关于mariaDB的东西

假设我收到一个实体字母

拥有这一财产:

代码语言:javascript
复制
/**
 *
 * @ORM\Column(type="json")
 */
private $metadatas;

其中包括,例如:

代码语言:javascript
复制
 {
    "key1": "value",
    "key2": "value"
 }

我怎样才能,或者,是否可以请求我的DB获得元数据列中特定键的特定值的字母。

就像这样:

代码语言:javascript
复制
public function getByKeyValue($key, $value)
      {
          $em = $this->_em;
          $dql = "SELECT l FROM AppBundle:Letter l
                  WHERE l.metadatas->:key = :value
                  ";

          $query = $em->createQuery($dql);
          $query->setParameter('key', $key);
          $query->setParameter('value', $value);


          return $query->getResult();
      } 

一些信息:

php7.1,mariadb 10.2+,原则/dbal ^2.6,原则orm ^2.5

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-20 22:53:40

您可以使用ScientaNL/DoctrineJsonFunctions

通过composer安装它,添加:

代码语言:javascript
复制
"scienta/doctrine-json-functions": "~4.0",

注册理论配置中所需的json函数,在本例中为JSON_CONTAINS

代码语言:javascript
复制
doctrine:
    orm:
        entity_managers:
            some_em: # usually also "default"
                dql:
                    string_functions:
                        JSON_CONTAINS: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Mysql\JsonContains

就我而言,我只是补充说:

代码语言:javascript
复制
doctrine:
    orm:
         dql:
              string_functions:
                  JSON_CONTAINS: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Mysql\JsonContains

使用它:

代码语言:javascript
复制
$queryBuilder = $this->getDoctrine()->getRepository('AppBundle:Letter')->createQueryBuilder('lt');
$queryBuilder
        ->where("JSON_CONTAINS(lt.metadatas, :mvalue, '$.key') = 1");

$queryBuilder->setParameter('mvalue', '"value"');
$query = $queryBuilder->getQuery();
return $query->getResult();

在dql中,应该是这样的:

代码语言:javascript
复制
$dql = "SELECT l FROM AppBundle:Letter l
              WHERE JSON_CONTAINS(lt.metadatas, :mvalue, '$.key') = 1
              ";

$.key是用于筛选的json键,mvalue应该包含在其json编码格式中,在本例中使用双引号

参考文献:

MySql json-搜索函数

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49279909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档