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

v440hwme  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(172)

我正在尝试在现有的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
我认为问题很小,但我自己看不出来。

jogvjijk

jogvjijk1#

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

->whereRaw("p.person->>'name' LIKE ?", $filterValue.'%')
ktecyv1j

ktecyv1j2#

您需要确保$trips是一个构建器,而不是一个集合或其他东西。

相关问题