我正试图在现有的Eloquent查询生成器(称为$trips
(上使用whereExists()
:
$trips = $trips->whereExists(function ($query) use ($filterValue) {
$query->from(DB::raw("jsonb_array_elements(passengers->'adults'->'persons') as p(person)"))
->whereRaw("p.person->>'name' LIKE '?%'", $filterValue);
});
我试图以原始postgres格式创建的查询如下(此查询使用pgAdmin运行良好(:
SELECT *
from trips
WHERE exists (select *
from jsonb_array_elements(passengers -> 'adults' -> 'persons') as p(person)
where p.person ->> 'name' LIKE 'Prof%');
我收到这个错误:
Invalid parameter number: parameter was not defined
我认为问题很小,但我自己看不出来。
whereRaw()
语句中的参数定义不太正确。参数化查询不仅仅是字符串替换。编写的查询中没有参数,它有一个字符串文字'?%'
。您需要将其更改为查询参数,并将%
通配符附加到传入的字符串中
试试这个:
->whereRaw("p.person->>'name' LIKE ?", $filterValue.'%')