2014-12-23 51 views
1

一個逆我需要創建一個像查詢逆,像這樣如何創建這樣的CakePHP

SELECT * FROM identities where 'keyword' like concat('%',identities.name,'%')

關鍵字=一些用戶類型

identities.name =表列

但我neet創建使用cakephp語法

$this->Indentity->find('all', array('conditions' => array('here something to help me'));

正常使用LIKE cakephp中不工作,因爲我NEET逆像

此查詢不工作,因爲是正常LIKE

$this->Indentity->find('all', array('conditions' => array('Indentity.name LIKE' => $keyword));

此查詢不工作,因爲的concat( '%',identitiesname,「%」)使用瞭如字符串不是一個函數

$this->Indentity->find('all', array('conditions' => array($keyword . ' LIKE' => "concat('%',`identities`.`name`,'%')"));
+0

您應該始終提及您正在使用的確切cakephp版本。我懷疑你正在使用CakePHP2.5。 – mark

回答

0

a)你可以隨時使用這些特定的querys

B)的虛擬域在這種情況下,它可能是最簡單的只是把它寫在單行:

$conditions = array($keyword . " LIKE CONCAT('%', `identities`.`name`, '%')"; 
$result = $this->Indentity->find('all', array('conditions' => $conditions)); 

注意,在這種情況下,缺少=>鍵值運營商以突出的ORM不逃逸的聲明。

注意:請記住,您將不得不手動確保(轉義,消毒,...)輸入的方式,使人們無法在查詢中注入多種功能,例如使用datasources的value()方法。

+0

我敢肯定,如果沒有示例顯示如何手動轉義,使用此代碼段的人中有99%會在其應用程序中引入SQL注入緩衝功能,但人們很懶,因此他們不會閱讀文檔除非你把他們擊倒他們的喉嚨:) – ndm

+0

好點。我在這裏添加了一個評論。 – mark