Postgresql上的Laravel / PDO JSONPATH请求

问题描述 投票:0回答:1

我正在尝试使用laravel / pdo在PostgreSQL上提出jsonpath请求。这是我需要存档的。

SELECT i.id as id, i.modele_id as modele_id, i.data as data, m.nom as modele_nom
FROM items i
JOIN modeles m ON (i.modele_id = m.id)
WHERE m.id = 2
AND i.data @? '$[*] ? ( (@.idParametre == 4 && @.valeur like_regex ".*555.*" flag "i") || exists( @.fields[*] ? (@.idParametre == 4 && @.valeur like_regex ".*555.*" flag "i")))'

PDO似乎有问题? (问号),因为它是参数的符号。我试图像这样设置请求:

$query = "SELECT i.id as id, i.modele_id as modele_id, i.data as data, m.nom as modele_nom FROM items i JOIN modeles m ON (i.modele_id = m.id) WHERE m.id = 2 AND i.data ? '?'";

$params = [
'@?',
'$[*] ? ( (@.idParametre == 4 && @.valeur like_regex ".*555.*" flag "i") || exists( @.fields[*] ? (@.idParametre == 4 && @.valeur like_regex ".*555.*" flag "i")))'
];

$items = DB::connection('pgsql')->select($query, $params);
dd($items);

但是我遇到了错误:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined (SQL: SELECT i.id as id, i.modele_id as modele_id, i.data as data, m.nom as modele_nom FROM items i JOIN modeles m ON (i.modele_id = m.id) WHERE m.id = 2 AND i.data @? '$[*] ? ( (@.idParametre == 4 && @.valeur like_regex ".*555.*" flag "i") || exists( @.fields[*] ? (@.idParametre == 4 && @.valeur like_regex ".*555.*" flag "i")))')

这是我不明白的地方。生成的请求正是我想要的,如果我回显$ query和$ params,我也很清楚地得到了一个带有2个参数的请求以及带有两个参数的params数组:

dd($query, $params);

"SELECT i.id as id, i.modele_id as modele_id, i.data as data, m.nom as modele_nom FROM items i JOIN modeles m ON (i.modele_id = m.id) WHERE m.id = 2 AND i.data ? '?'"
array:2 [
  0 => "@?"
  1 => "$[*] ? ( (@.idParametre == 4 && @.valeur like_regex ".*555.*" flag "i") || exists( @.fields[*] ? (@.idParametre == 4 && @.valeur like_regex ".*555.*" flag "i")))"
]

有人知道如何处理吗?

最诚挚的问候,感谢您的阅读。

php laravel postgresql pdo jsonpath
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.