Concat (2 поля) LIKE отправленное значение с использованием Propel/Mysql/PHP

Propel/PHP/Mysql вопрос для вас. У меня есть окно поиска, которое будет искать имена в таблице. Мне нужно объединить 2 поля, first_name и last_name, а затем сделать LIKE% отправленную строку%. Все в движении.

Это то, что у меня есть на данный момент:

        $custQuery = CustomerQuery::create()
            ->withColumn("CONCAT(first_name, ' ', last_name)", "full_name")
            ->where("full_name LIKE %?%", $nameInput);

Это дает ошибку:

Cannot determine the column to bind to the parameter in clause "full_name = ?".

Очевидно, я не могу использовать виртуальный столбец в операторе where. Когда я пытаюсь выполнить concat внутри оператора where, я получаю ту же ошибку.

        $custQuery = CustomersQuery::create()
            ->where("CONCAT(first_name, ' ', last_name) LIKE %?%", $searchStr);

Я бы предпочел не делать этого без параметров:

        $custQuery = CustomersQuery::create()
            ->where("CONCAT(first_name, ' ', last_name) LIKE %$searchStr%");

Это работает, но я ищу более ориентированный на продвижение метод. Есть ли способ сделать это вообще без оператора where?

Благодаря тонну!


person Nick Du Bois    schedule 09.10.2015    source источник
comment
Я не знаю, как продвигается, но поскольку mysql касается SELECT CONCAT (first_name, last_name) AS full_name FROM tablename; Он вернет вам объединенное имя.   -  person innovative kundan    schedule 09.10.2015
comment
Последний запрос, который я отправил, - это без AS. Я использую это, и это работает. Я бы предпочел использовать настоящий двигатель, чтобы сделать это, если это возможно.   -  person Nick Du Bois    schedule 09.10.2015
comment
Да, вы не используете «как», потому что Propel делает это за вас. Поскольку вы отправили full_name в качестве параметра withColumn()   -  person innovative kundan    schedule 09.10.2015
comment
Я смущен. В первом запросе, который я разместил выше, я использую withcolumn и устанавливаю псевдоним. Я получаю ту же ошибку, используя этот запрос. Если я использую полный вариант where: -›where(CONCAT(first_name, , last_name) as full_name LIKE %?%, $inputStr), я получаю указанную выше ошибку. Единственный способ заставить его работать — полностью удалить параметр, как вы видите, я сделал в последнем запросе выше. Это работает, но не так, как я хотел бы это сделать. Другого пути нет?   -  person Nick Du Bois    schedule 09.10.2015


Ответы (1)


Вы должны использовать имена псевдостолбцов. Таким образом, если ваш обычный метод фильтрации для столбца customers.first_name равен ->filterByFirstName(), то при использовании метода ->where() или ->condition() вам также придется использовать имя псевдостолбца «FirstName» вместо «first_name».

Итак, ваш проблемный запрос:

 $custQuery = CustomersQuery::create()
            ->where("CONCAT(first_name, ' ', last_name) LIKE %?%", $searchStr);

станет:

$custQuery = CustomersQuery::create()
            ->where("CONCAT(Customers.FirstName, ' ', Customers.LastName) LIKE ?", '%'.$searchStr.'%');

Я добавил туда и для вас имя таблицы, и вам нужно сделать знаки процента частью параметра, а не частью оператора запроса.

person hacklan07    schedule 20.10.2015