Так что я UserRepository, содержащий следующий кодSymfony Доктрина конструктор запросов, как не работает в PostgreSQL
namespace AppBundle\Repository;
use \Doctrine\ORM\EntityRepository;
class UserRepository extends EntityRepository
{
public function findByRole($role)
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u')
->from($this->_entityName, 'u')
->where('u.roles LIKE :roles')
->setParameter('roles', '%"'.$role.'"%');
return $qb->getQuery()->getResult();
}
}
Это, кажется, работает прекрасно, если моя база данных MySQL, но если я изменить базу данных для PostgreSQL это запрос бросает следующую ошибку
An exception occurred while executing 'SELECT p0_.id AS id_0, p0_.username AS username_1, p0_.password AS password_2, p0_.is_active AS is_active_3, p0_.roles AS roles_4, p0_.name AS name_5, p0_.street AS street_6, p0_.city AS city_7, p0_.state AS state_8, p0_.zip_code AS zip_code_9, p0_.phone_number AS phone_number_10, p0_.dob AS dob_11, p0_.company_name AS company_name_12, p0_.company_slug AS company_slug_13, p0_.company_logo AS company_logo_14, p0_.company_details AS company_details_15, p0_.stripe_customer_id AS stripe_customer_id_16, p0_.created_at AS created_at_17, p0_.updated_at AS updated_at_18 FROM px_user p0_ WHERE p0_.roles LIKE ?' with params ["%\"ROLE_EMPLOYER\"%"]:
SQLSTATE[42883]: Undefined function: 7 ERROR: operator does not exist: json ~~ unknown LINE 1: ...at AS updated_at_18 FROM px_user p0_ WHERE p0_.roles LIKE $1^HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Это первый раз, когда я работаю с PostgreSQL
, так что я не получаю то, что проблема есть. Поиграв с ним некоторое время, если я сгенерировал сгенерированный запрос, добавив следующий фрагмент
WHERE
p0_.roles::text LIKE '%ROLE_EMPLOYER%'
Все работает нормально. Обратите внимание на :: текст.
Итак, как я могу добавить это в конструктор запросов , так что он также работает с PostgreSQL.
использования -> setParameter ('роли', "%". $ роль. '%"'); –
@JasminMistry Я тоже пробовал, но такая же ошибка появляется. – Baig
'-> где ('CAST (u.roles AS TEXT) LIKE: role')' должен работать.Ваши «роли» - это столбец с 'json', и они не могут использоваться вместо строковых типов напрямую (где движок ожидает тип строки (f.ex.' text') - оператор 'LIKE' (также' ~~ ') так же). – pozs