Heim  >  Artikel  >  Backend-Entwicklung  >  Vergleich der Methoden zum Suchen bestimmter Felder mithilfe von find findAll im Yii-Framework

Vergleich der Methoden zum Suchen bestimmter Felder mithilfe von find findAll im Yii-Framework

高洛峰
高洛峰Original
2017-02-06 17:08:541259Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn