2017-02-10 2 views
5

Мой сайт просто отлично работает, и я развернул его в герою, и проблема в геройке использует pgsql, и я использую mysql и laravel framework.Ошибка Pgsql: вам может потребоваться добавить явные типы приведения

мой запрос

$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), и я не получаю ошибку, но она не возвращает никакого результата.

+0

я не знаю, этот API хорошо, но 'где "patient_address" ILIKE% Сан Francisco' неправильно,' Сан Francisco' должны быть одного цитирует AFAIK. –

+0

это переменная $ request-> input = san fancisco, как я могу поставить на нее одиночную кавычку? – Christian

+0

Я не уверен, только могу вам сказать, что если вывод запроса является дословным, значит, это неправильно. –

ответ

6

Проблемы здесь:

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

выглядит vsaccine_id является целым числом, и вы не можете использовать оператор ILIKE в целом. Попробуйте просто '='

Если вы хотите использовать LIKE, ILIKE или другой текстовый оператор, вы должны указать текст вашего текста. В SQL затхлый выглядит как

WHERE "vaccine_id"::text ILIKE val 

вместо

WHERE "vaccine_id" ILIKE val 
+0

У меня есть причина, почему я использовал ILIKE, я использовал так, даже если где false, я все еще могу запустить другой, где условия, потому что у меня есть цепочка где статья – Christian

+0

Ваша ошибка 'operator не существует: integer ~~ * unknown' - это потому, что vaccine_id является целым числом. И целое число не имеет оператора ILIKE (~~). –

+0

, то почему он работает с mysql? Если он работает с mysql, должно возникнуть обходное решение с pgsql – Christian

Смежные вопросы