Postgresql Pgsql错误:您可能需要添加显式类型转换

Postgresql Pgsql错误:您可能需要添加显式类型转换,postgresql,heroku,Postgresql,Heroku,我的网站在部署到heroku之前运行良好,问题是heroku使用pgsql,而我使用的是mysql和laravel框架 我的问题是 $patient = Patient::where('patient_address', 'ILIKE' ,'%' . $request->input)->where('patient_sex', 'ILIKE' ,'%' . $request->gender)->whereHas('users', function($q) use($vac

我的网站在部署到heroku之前运行良好,问题是heroku使用pgsql,而我使用的是mysql和laravel框架

我的问题是

$patient = Patient::where('patient_address', 'ILIKE' ,'%' . $request->input)->where('patient_sex', 'ILIKE' ,'%' . $request->gender)->whereHas('users', function($q) use($vaccine_id){
        $q->where('vaccine_id','ILIKE','%' . $vaccine_id);
    })->get();
这是我部署到heroku时得到的结果

SQLSTATE[42883]:未定义函数:7错误:运算符不存在:整数~~*未知
第1行:…客户id“=”患者“、”患者id“和”疫苗id“我喜欢$3)

提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。(SQL:从“患者”中选择*,其中“患者地址”类似于%San Francisco,“患者性别”类似于%San Francisco并存在(从“疫苗”中选择*,在“疫苗”中内部加入“免疫”。“疫苗id”=“免疫”。“疫苗id”其中)免疫接种““患者id”=“患者”、“患者id”和“疫苗id”ILIKE%))

我尝试过使用cast-like-cast(疫苗id为VARCHAR),但没有得到错误,但没有返回任何结果。

问题在于:

$q->where('vaccine_id','ILIKE','%' . $vaccine_id)
看起来您的id是整数,您不能使用运算符ILIKE to integer。请尝试使用'='

如果要使用LIKE、ILIKE或其他文本运算符,则必须将数据转换为文本。在SQL中,它必须类似于:

WHERE "vaccine_id"::text ILIKE val
反而

WHERE "vaccine_id" ILIKE val

您可以这样做:

$q->where('cast(vaccine_id AS VARCHAR)','LIKE','%' . $vaccine_id)

$q->where('cast(vaccine_id AS TEXT)','LIKE','%' . $vaccine_id)

我不太了解这个API,但是
where“patient\u address“我想%San Francisco
是错误的,
San Francisco
应该在单引号中。这是一个变量$request->input=San fancisco如何在它上面加单引号?我不确定,只有我可以告诉你,如果查询输出是逐字逐句的,那么它就错了。您的错误是
运算符不存在:integer~~*unknown
-这是因为疫苗id是整数。整数没有类似于(~~)的运算符,因为mysql不是纯sql。至少对我来说是这样。可能它根据某些规则在默认情况下强制转换数据。运算符“=”适用于所有类型,postgresql可以强制转换第二种类型,但不能转换第一种类型。i、 e.“age”=“2”-postgres saw than“age”是int并将“2”强制转换为int。但第一个参数必须强制转换为manuallyNo,因为where-是一个laravel方法。可能类似于$q->WhereRaw(“疫苗id::文本ILIKE“%”?%,[$疫苗id]”)为什么需要ILIKE?如果这个整数可以使用任何其他比较?ilike是case inselivity吗?您使用它进行什么类型的检查?我在通过JPA调用过程时遇到了这个错误。尝试使用::运算符强制转换,但未成功,强制转换()可以正常工作。非常感谢。