2017-07-03 27 views
1

我想在子類別控制器中使用類別列表。我想下面的方法來獲取類,其狀態均爲1where子句在cakephp中不起作用3.4

$this->loadModel('Categories'); 
$query = $this->Categories->find(); 
$query->where(['cat_status' => 1]); 

這是返回下面的輸出

「SELECT Categories.id AS Categories__id,Categories.cat_name AS Categories__cat_name,Categories.cat_status AS Categories__cat_status FROM類別分類WHERE cat_status =:C0'

我不知道它是越來越:C0。然後我用另一個代碼給出了所有的列表,但where子句不起作用。

$this->loadModel('Categories'); 
$categories = $this->Categories->find('all',[ 
              'where' => (['cat_status'=>1]), 
              'limit' => 5, 
              'order' => 'Categories.id DESC' 
    ]); 
debug($categories); 

輸出是

SELECT Categories.id AS Categories__id,Categories.cat_name AS Categories__cat_name,Categories.cat_status AS Categories__cat_status FROM類別分類ORDER BY Categories.id DESC LIMIT 5

請建議一個合適的方法。

+0

這豈不是更有意義的'把 - >其中()'運行前' - > find()' – RiggsFolly

+0

「_doesn't work_」不是一個合適的問題描述!即使問題對於瞭解CakePHP內部的人來說可能是顯而易見的,請始終儘可能具體說明_exactly_發生了什麼,以及您希望發生什麼_exactly_。顯示您正在使用的數據,上下文,重現問題所需的代碼,您的調試嘗試以及可能的錯誤。這就是說,你顯示的是一個完全有效的SQL查詢,並帶有佔位符的綁定值。 – ndm

+0

@RiggsFolly在CakePHP 3.x中,'find()'返回一個查詢(構建器)對象。 – ndm

回答

0

通過如下例所示的查詢來傳遞條件。

$categories = $this->Categories->find('all',['conditions'=>['cat_status'=>1]])->limit(5)->order(['Categories.id'=> 'DESC']); 
+0

它正在工作。我得到結果,但爲什麼查詢結果爲 SELECT Categories.id AS'Categories__id',Categories.cat_name AS'Categories__cat_name',Categories.cat_status AS'Categories__cat_status' FROM categories Categories WHERE cat_status =:c0 ORDER BY Categories.id DESC LIMIT 5 你能解釋一下是什麼:c0? –

+1

@ shubham715它沒有做到允許轉義輸入。這樣做是爲了允許綁定參數。即使 [如果你是逃避投入,它不安全!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) – RiggsFolly

+1

你可以閱讀詳細信息在這裏https://stackoverflow.com/questions/18426172/what-does-bind-param-accmlish – shubham715

0

您需要添加->first() 到您的where子句,像這樣:

$query->where(['cat_status' => 1])->first();