gpt4 book ai didi

json - 使用 Doctrine2 请求 JSON 类型字段中的键/值

转载 作者:行者123 更新时间:2023-12-04 16:58:00 24 4
gpt4 key购买 nike

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

假设我收到了一个实体 Letter

使用此属性:

/**
*
* @ORM\Column(type="json")
*/
private $metadatas;

其中包含,例如:
 {
"key1": "value",
"key2": "value"
}

我如何,或者,是否可以要求我的数据库为元数据列中的特定键获取具有特定值的字母。

类似的东西:
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+, doctrine/dbal ^2.6, doctrine orm ^2.5



非常感谢。

最佳答案

您可以使用 ScientaNL/DoctrineJsonFunctions

通过添加以下内容通过 Composer 安装它:

"scienta/doctrine-json-functions": "~4.0",

注册 Doctrine 配置中需要的json函数,在本例中 JSON_CONTAINS :
doctrine:
orm:
entity_managers:
some_em: # usually also "default"
dql:
string_functions:
JSON_CONTAINS: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Mysql\JsonContains

就我而言,我只是补充说:
doctrine:
orm:
dql:
string_functions:
JSON_CONTAINS: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Mysql\JsonContains

用它:
$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 中,它应该是这样的:
$dql = "SELECT l FROM AppBundle:Letter l
WHERE JSON_CONTAINS(lt.metadatas, :mvalue, '$.key') = 1
";

备注 $.key 是要过滤的 json 键,mvalue 应包含在其 json 编码格式中,在本例中为 双引号 .

引用:

MySql json-search-functions

关于json - 使用 Doctrine2 请求 JSON 类型字段中的键/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49279909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com