Laravel -WhereExists 返回“无效参数号:参数未定义”

f7n*_*f7n 1 postgresql laravel eloquent

whereExists()我正在尝试在现有的 Eloquent 查询生成器(称为)上使用$trips

$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);
});
Run Code Online (Sandbox Code Playgroud)

我尝试以原始 postgres 格式创建的查询如下(此查询使用 pgAdmin 可以正常工作):

SELECT * 
from trips
WHERE exists (select * 
              from jsonb_array_elements(passengers -> 'adults' -> 'persons') as p(person)
              where p.person ->> 'name' LIKE 'Prof%');
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Invalid parameter number: parameter was not defined

我觉得问题很小,但是我自己看不出来。

pat*_*cus 5

您的语句中的参数定义whereRaw()不太正确。参数化查询不仅仅是字符串替换。您编写的查询中没有参数,它的字符串文字为'?%'. 您需要将其更改为查询参数,并将%通配符附加到您传入的字符串中。

尝试这个:

->whereRaw("p.person->>'name' LIKE ?", $filterValue.'%')
Run Code Online (Sandbox Code Playgroud)