web-dev-qa-db-ja.com

Pgsqlエラー:明示的な型キャストを追加する必要がある場合があります

私のWebサイトは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]: Undefined function: 7 ERROR: operator does not exist: integer ~~* unknown LINE 1: ...ient_id" = "patients"."PatientID" and "vaccine_id" ILIKE $3)_

HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. (SQL: select * from "patients" where "patient_address" ILIKE %San Francisco and "patient_sex" ILIKE % and exists (select * from "vaccines" inner join "immunizations" on "vaccines"."VaccineID" = "immunizations"."vaccine_id" where "immunizations"."patient_id" = "patients"."PatientID" and "vaccine_id" ILIKE %))

CAST(vaccine_id AS VARCHAR)のようなキャストを使用しようとしましたが、エラーは表示されませんが、結果が返されません。

15
Christian

問題はここにあります:

$q->where('vaccine_id','ILIKE','%' . $vaccine_id)

vaccine_idは整数のように見え、整数に演算子ILIKEを使用することはできません。 「=」だけを試してください

LIKE、ILIKE、またはその他のテキスト演算子を使用する場合は、データをテキストにキャストする必要があります。 SQLでは、次のようになります。

WHERE "vaccine_id"::text ILIKE val

代わりに

WHERE "vaccine_id" ILIKE val
17
Roman Tkachuk