web-dev-qa-db-fra.com

Erreur Pgsql: vous devrez peut-être ajouter des conversions de types explicites

Mon site Web fonctionne bien jusqu’à ce que je l’ai déployé sur heroku et le problème est que heroku utilise pgsql et j’utilise mysql et laravel).

ma requête est

$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();

voici ce que je reçois quand je le déploie à 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 %))

J'ai essayé d'utiliser cast comme CAST (vaccin_id AS VARCHAR) et je ne reçois pas l'erreur, mais cela ne renvoie aucun résultat.

15
Christian

Le problème est ici:

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

ressemble à vaccin_id est un entier, et vous ne pouvez pas utiliser l'opérateur ILIKE en entier. Essayez juste '='

Si vous souhaitez utiliser LIKE, ILIKE ou un autre opérateur de texte, vous devez convertir vos données en texte. En SQL, cela doit ressembler à:

WHERE "vaccine_id"::text ILIKE val

au lieu

WHERE "vaccine_id" ILIKE val
17
Roman Tkachuk