Concat(2 个字段)LIKE 使用 Propel/Mysql/PHP 提交的值

Concat (2 fields) LIKE submitted value using Propel/Mysql/PHP

Propel/PHP/Mysql 给你的问题。我有一个搜索框,可以在 table 中搜索名称。我需要连接 2 个字段,first_name 和 last_name,而不是 LIKE % submitted string %。全力推进。

这是我目前拥有的:

        $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 语句中使用虚拟列。当我尝试在 where 语句中执行 concat 时,我得到了同样的错误。

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

我宁愿避免在没有参数的情况下这样做:

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

它有效,但我正在寻找一种更具推动力的方法来执行此操作。有没有办法在根本没有 where 语句的情况下做到这一点?

非常感谢!

您必须使用伪列名。因此,如果您对 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.'%');

为了便于衡量,我也为您在其中添加了 table 名称,您需要将百分号作为参数的一部分,而不是查询语句的一部分。