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

时间:2020-09-04 14:34:19

标签: laravel postgresql eloquent

我正在尝试在现有的口才查询生成器(称为whereExists())上使用$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);
});

我正尝试以原始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

我认为问题很小,但我自己看不到。

2 个答案:

答案 0 :(得分:0)

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

尝试一下:

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

答案 1 :(得分:0)

检查$ trips是否是构建器,而不是集合或其他东西。

您没有显示$ trips来自何处

您可以要求更多详细信息。

祝你好运;)