本文以實例形式展示了Yii使用find findAll查找出指定字段的實現方法,分享給大家供大家參考之用。具體方法如下:
總所周知,采用如下方法:
modelName::model() -> find() //找出的是一個對象 modelName::model() -> findALL() //找出的是一個對象集合的數組
可以找出對象與對象集合的數組,那麼如何找出我所需要的字段的數據,而不是全部字段的數據呢?之前我是這麼做的:
$criteria = new CDbCriteria; $criteria->select = 'username,id,email'; $criteria->order = 'id DESC'; $users = modelName::model()->findAll( $criteria );
後台無意中看到別人有這麼寫的,方法很不錯:
$users = modelName::model()->findAll(array( 'select' =>array('username','id','email'), 'order' => 'id DESC', ));
測試後發現果然可以用,那麼find也可以這麼操作:
$user = modelName::model()->find(array( 'select' =>array('username','id','email'), 'order' => 'id DESC', 'condition' => 'id='.$id, ));
當然了,這麼做肯定不安全了,換成下面的方法同樣可以:
$users = $this->user->find(array( 'select'=>array('id','username','email'), 'order' => 'id DESC', 'condition' => 'state=:state AND id=:id', 'params' => array(':state'=>'1',':id' => '2'), ));
同理用findAll測試了也可以。
結論:
通過這種方法能夠很方便的獲取所需要的數據,當然需要分頁的時候還是 需要 new 一下 CDbCriteria 的。
希望本文所述對大家采用Yii進行數據庫程序設計能有所幫助。
獲取你需要的數據 下面是Model中一些獲取你需要的數據的標准方法: findAll string $conditions array $fields string $order int $limit int $page int $recursive [$conditions Type: string] 檢索條件,就是sql中where子句,就像這樣 $conditions = "race = 'wookie' AND thermal_detonators > 3"。 [$fields Type: array] 檢索屬性,就是投影,指定所有你希望返回的屬性。 (譯注:這裡我沒有使用字段這個親SQL的名字而是用了屬性這個親對象的名字,我相信很多PHPer更熟悉基於Sql和DTO的開發模式,但是引入Model的一個初衷就是將關系數據庫轉換為對象操作,所以投影查詢應該理解為檢索對象的某些屬性) [$order Type: string] 排序屬性 指定了oder by的屬性名 [TODO:check whether the multiple order field be supported] [$limit Type: int] 結果集數據條目限制 [$page Type: int] 結果集分頁index,默認為返回第一頁 [$recursive Type: int] 遞歸 當設為大於1的整數時,將返回該model關聯的其他對象。(譯注:如果你使用過類似於Hibernate這樣的ORM工具的話,不難理解這個屬性就是LazyLoad屬性,但也不完全等同,數字的值代表級聯查詢的層次數,例如這樣,user.country.city.address.id) find string $conditions array $fields string $order int $recursive find方法和findAll方法的區別在於,findAll方法返回所有符合的結果集,find方法只返回list中的第一個結果。
前提是要在數據庫對應的實體文件中定義該屬性。