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 名称,您需要将百分号作为参数的一部分,而不是查询语句的一部分。
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 名称,您需要将百分号作为参数的一部分,而不是查询语句的一部分。