Heim > Artikel > Backend-Entwicklung > Vergleich der Methoden zum Suchen bestimmter Felder mithilfe von find findAll im Yii-Framework
Wie wir alle wissen
modelName::model() -> //Was gefunden wird, ist ein Objekt
modelName::model() -> Was gefunden wird Es ist ein Array von Objektsammlungen
So finde ich die Daten der Felder, die ich benötige, nicht die Daten aller Felder
Das habe ich schon einmal gemacht
$criteria = new CDbCriteria; $criteria->select = 'username,id,email'; $criteria->order = 'id DESC'; $users = modelName::model()->findAll( $criteria );
Ich habe zufällig gesehen, wie jemand anderes im Hintergrund so etwas schrieb, und mir wurde klar, wie unwissend ich war
$users = modelName::model()->findAll(array( 'select' =>array('username','id','email'), 'order' => 'id DESC', ));
Nachdem ich es getestet hatte, stellte ich fest, dass es funktioniert, also find kann dies auch tun
$user = modelName::model()->find(array( 'select' =>array('username','id','email'), 'order' => 'id DESC', 'condition' => 'id='.$id, ));
Natürlich ist es definitiv nicht sicher, dies zu tun
$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'), ));
Verwenden Sie ebenfalls findAll zum Testen. Schlussfolgerung
Mit dieser Methode können Sie die erforderlichen Daten natürlich problemlos abrufen, wenn eine Paginierung erforderlich ist, sind für die folgenden CDb-Kriterien weiterhin neue Daten erforderlich
Zum Beispiel möchte ich die Daten in den Videoinfo-Tabellen „v_id“, „title“, „big_class“, „sub_class“, „upload_time“, „comment_num“ und anderen Feldern herausnehmen und die Bedingung ist status=1, folgen lastmodifytime in umgekehrter Reihenfolge, und nehmen Sie nur 3 heraus, tun Sie dies:
$criteria = new CDbCriteria() ; $criteria -> select = array('v_id','title','big_class','sub_class','upload_time','comment_num'); $criteria -> condition = 'status = 1'; $criteria -> order = 'lastmodifytime desc'; $criteria -> limit = 3; $criteria ->params = array (':status' => $你的变量) ; $result = VideoInfo::model()->findAll($criteria);
Die von mir auskommentierte Zeile kann zum Übergeben von Variablen verwendet werden, die beispielsweise durch Platzhalter dargestellt werden Der Status muss anhand der Variablen bedingt zugewiesen werden. Sie können die Zeilenzuweisung auskommentieren und die Bedingung dann als
$criteria -> condition = 'status = :status';
schreiben Die Ergebnisvariable ist das Ergebnis, das Sie erhalten. Es handelt sich um eine Liste von Objekten, die durchlaufen werden müssen:
foreach ($result as $ob){ print_r($ob->attributes); }Wenn Sie beispielsweise jedes Feld anzeigen möchten, geben Sie einfach
$ob->attributes['title'];
usw.
Schließlich kann die CPagination-Klasse zusammen mit der CDbCriteria-Klasse und dem Front-End-Paging-Plug-in zur Unterstützung von Paging verwendet werden:
$count =VideoInfo::model()->count($criteria) $pages=new CPagination($count); $pages->pageSize=30; //每页分多少条 $pages->applyLimit($criteria);
$result = VideoInfo::model()->findAll($criteria);
Mehr find findAll im Yii-Framework Bitte beachten Sie die chinesische PHP-Website für verwandte Artikel zum Herausfinden der angegebenen Felder!