Maison >développement back-end >tutoriel php >Comparaison des méthodes pour rechercher des champs spécifiés à l'aide de find findAll dans le framework Yii
Comme nous le savons tous
modelName::model() -> find() //Ce qui est trouvé est un objet
modelName::model() -> findALL() // Ce qui est trouvé Il s'agit d'un tableau de collections d'objets
Comment trouver les données des champs dont j'ai besoin, pas les données de tous les champs
Je l'ai déjà fait
$criteria = new CDbCriteria; $criteria->select = 'username,id,email'; $criteria->order = 'id DESC'; $users = modelName::model()->findAll( $criteria );
J'ai accidentellement vu quelqu'un d'autre écrire quelque chose comme ça en arrière-plan et j'ai réalisé à quel point j'étais ignorant
$users = modelName::model()->findAll(array( 'select' =>array('username','id','email'), 'order' => 'id DESC', ));
Après l'avoir testé, j'ai trouvé que cela fonctionnait, alors find peut également le faire
$user = modelName::model()->find(array( 'select' =>array('username','id','email'), 'order' => 'id DESC', 'condition' => 'id='.$id, ));
Bien sûr, ce n'est certainement pas sûr de faire cela. Vous pouvez également utiliser la méthode suivante
$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'), ));Utilisez findAll de la même manière pour tester C'est ok. Conclusion Cette méthode peut facilement obtenir les données requises. Bien sûr, lorsque la pagination est nécessaire, de nouvelles sont toujours nécessaires pour les CDbCriteria suivants. > Par exemple, je souhaite supprimer les données de la table videoinfo 'v_id', 'title', 'big_class', 'sub_class', 'upload_time', 'comment_num' et d'autres champs, et la condition est status=1. , suivez lastmodifytime dans l'ordre inverse, et n'en supprimez que 3, faites ceci :
$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);La ligne que j'ai commentée peut être utilisée pour transmettre des variables, représentées par des espaces réservés. Par exemple, si votre statut doit être attribué de manière conditionnelle en fonction de variables, vous pouvez le commenter Affectation de ligne, puis écrire la condition comme
$criteria -> condition = 'status = :status';De cette façon, la variable $result est le résultat que vous obtenez. C'est une liste d'objets et doit être parcourue :
foreach ($result as $ob){ print_r($ob->attributes); }et ainsi de suite
$ob->attributes['title'];
Enfin, la classe CPagination peut être utilisée avec la classe CDbCriteria et le plug-in de pagination frontale pour prendre en charge la pagination. :
$count =VideoInfo::model()->count($criteria) $pages=new CPagination($count); $pages->pageSize=30; //每页分多少条 $pages->applyLimit($criteria);
$result = VideoInfo::model()->findAll($criteria);
Plus find findAll dans le framework Yii Pour les articles connexes sur la façon de connaître les champs spécifiés, veuillez faire attention au PHP Site chinois !