我需要创建一个类似逆的查询,类似这样的
SELECT * FROMidentities
where 'keyword' like concat('%',identities
.name
,'%')
keyword =用户输入的内容
identities.name =表格列
但我需要使用cakephp语法创建
$this->Indentity->find('all', array('conditions' => array('here something to help me'));
使用cakephp无法正常工作的正常LIKE,因为我喜欢
此查询无效,因为是正常的LIKE
$this->Indentity->find('all', array('conditions' => array('Indentity.name LIKE' => $keyword));
此查询无效,因为concat('%',identities
。name
,'%')使用类似字符串而不是函数
$this->Indentity->find('all', array('conditions' => array($keyword . ' LIKE' => "concat('%',`identities`.`name`,'%')"));
答案 0 :(得分:0)
a)您始终可以将虚拟字段用于此类特定查询
b)在这种情况下,将它写在一行中可能最简单:
$conditions = array($keyword . " LIKE CONCAT('%', `identities`.`name`, '%')";
$result = $this->Indentity->find('all', array('conditions' => $conditions));
注意在这种情况下缺少=>
键值运算符以表示ORM不会转义该语句。
注意:请记住,您必须以人们无法在查询中注入虚拟内容的方式手动保护(转义,清理,...)输入,例如:使用datasources value()方法。