À propos de la requête de modèle Yii basée sur un tableau et un objet

不言
Libérer: 2023-04-01 10:00:01
original
1493 Les gens l'ont consulté

Cet article présente principalement les techniques de requête de modèle de Yii basées sur des tableaux et des objets, et analyse en détail les techniques de requête de modèle de Yii pour les tableaux et les objets à partir d'exemples. Les amis dans le besoin peuvent s'y référer

Cet article décrit les techniques de requête de modèle de Yii. modéliser des techniques de requête basées sur des tableaux et des objets avec des exemples. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Pour une publication modèle, il existe les 4 méthodes de requête suivantes, qui renvoient des objets ou des tableaux d'objets.

//查找满足指定条件的结果中的第一行 find the first row satisfying the specified condition
$post=Post::model()->find($condition,$params);
//查找具有指定主键值的那一行 find the row with the specified primary key
$post=Post::model()->findByPk($postID,$condition,$params);
//查找具有指定属性值的行 find the row with the specified attribute values
$post=Post::model()->findByAttributes($attributes,$condition,$params);//未找到返回null
//通过指定的SQL 语句查找结果中的第一行 find the first row using the specified SQL statement
$post=Post::model()->findBySql($sql,$params);
Copier après la connexion

Si la méthode find trouve une ligne qui répond aux conditions de requête, elle renverra une instance Post dont les attributs contiennent les valeurs des colonnes correspondantes dans la ligne du tableau de données. Ensuite, nous pouvons lire la valeur chargée tout comme les propriétés d'un objet normal, tel que echo $post->title;. La méthode find renverra null si rien n'est trouvé dans la base de données en utilisant les critères de requête donnés.

Lors de l'appel de find, nous utilisons $condition et $params pour spécifier les conditions de la requête. Ici, $condition peut être une chaîne WHERE dans l'instruction SQL et $params est un tableau de paramètres dont les valeurs doivent être liées aux espaces réservés dans $condation. Par exemple : supposons que nous interrogeons les données avec postID = 10

// find the row with postID=10
$post=Post::model()->find('postID=:postID', array(':postID'=>10));
Copier après la connexion

La condition $condition est la partie Where de notre SQL. Qu'en est-il des paramètres ? Ils sont transmis via les paramètres, mais le nom est ajouté avec. " : ".

YII a une classe CDbCriteria pour construire des requêtes. Si nous interrogeons un titre avec un postId de 10, CdbCriteria est construit comme ceci

$criteria=new CDbCriteria;
$criteria->select='title'; // only select the 'title' column
$criteria->condition='postID=:postID';
$criteria->params=array(':postID'=>10);
$post=Post::model()->find($criteria); // $params is not needed
Copier après la connexion

Une alternative à CDbCriteria est de passer a au trouver un tableau de méthodes. Les clés et valeurs du tableau correspondent respectivement aux noms d'attributs et aux valeurs du critère. L'exemple ci-dessus peut être réécrit comme suit :

$post=Post::model()->find(array(
  'select'=>'title',
  'condition'=>'postID=:postID',
  'params'=>array(':postID'=>10),
));
Copier après la connexion

Bien entendu, il s'applique également à findAll(. )

self::$_items[$type]=array();
$models=self::model()->findAll(array(
  'condition'=>'type=:type',
  'params'=>array(':type'=>$type),
  'order'=>'position',
));
Copier après la connexion

Lorsqu'une condition de requête consiste à faire correspondre plusieurs colonnes par des valeurs spécifiées, nous pouvons utiliser findByAttributes(). Nous faisons du paramètre $attributes un tableau de valeurs indexées par nom de colonne.
$attributes dans findByAttributes est le nom du champ Comment demander si le titre est abc ? Voir ci-dessous

Post::model()->findByAttributes(array('title'=>'abc'))
Copier après la connexion

Autres méthodes :

1. $admin=Admin::model()->findAll($condition,$params );

Cette méthode consiste à interroger une collection en fonction d'une condition, telle que :

findAll("username=:name",array(":name"=>$username));
Copier après la connexion

2 $admin=Admin::model()-. >findAllByPk ($postIDs,$condition,$params);
findAllByPk($id,"name like ':name' et age=:age" ,array(':name'=>$name ,'age '=>$age));
Cette méthode consiste à interroger une collection en fonction de la clé primaire. Plusieurs clés primaires peuvent être utilisées, telles que :

findAllByPk(array(1,2));
Copier après la connexion

3. $admin=Admin::model ()->findAllByAttributes($attributes,$condition,$params);

Cette méthode consiste à interroger une collection en fonction de conditions, qui peuvent être multiples conditions. Placez les conditions dans un tableau, tel que :

findAllByAttributes(array('username'=>'admin'));
Copier après la connexion

4. $admin=Admin::model()->findAllBySql($sql,$params);

Cette méthode est basée sur l'instruction SQL Interroger un tableau, tel que :

findAllBySql("select *from admin where username=:name",array(':name'=>'admin'));
Copier après la connexion

2. Méthode d'objet de requête

1. $admin=Admin::model()-> ;findByPk($postID,$condition,$params);

Interrogez un objet basé sur la clé primaire, tel que :

findByPk(1);
Copier après la connexion

2. $row=Admin : :model()->find($condition,$params);

Interroger un ensemble de données en fonction d'une condition , il peut y en avoir plusieurs, mais il ne renvoie que la première ligne de données, telle que :

find('username=:name',array(':name'=>'admin'));
Copier après la connexion

3 $admin=Admin::model()->findByAttributes($attributes, $condition,$params);

Cette méthode consiste à interroger un ensemble de données basées sur des conditions, qui peuvent être plusieurs conditions. Mettez les conditions dans le tableau, et elle interrogera également le premier élément de. données, telles que :

findByAttributes(array('username'=>'admin'));
Copier après la connexion

4. $admin=Admin: :model()->findBySql($sql,$params);

Ceci La méthode interroge un ensemble de données basé sur l'instruction SQL, et elle interroge également le premier élément de données, tel que :

findBySql("select *from admin where username=:name",array(':name'=>'admin'));
Copier après la connexion

5. Mettez en place une méthode pour obtenir SQL et interrogez un objet basé sur find

$criteria=new CDbCriteria;
$criteria->select='username'; // only select the 'title' column
$criteria->condition='username=:username';
$criteria->params=array(':username=>'admin');
$post=Post::model()->find($criteria); // $params is not needed
Copier après la connexion

3. Recherchez le numéro et déterminez si la requête a un résultat

1 $n=Post : :model()->count($condition,$params);

Cette méthode est basée sur une requête conditionnelle combien d'enregistrements il y a dans une collection et renvoie un nombre entier, tel que

count("username=:name",array(":name"=>$username));
Copier après la connexion

2. $n=Post::model()->countBySql($sql,$params) ;

Cette méthode consiste à demander combien les enregistrements se trouvent dans une collection basée sur l'instruction SQL et renvoient un nombre entier, tel que

countBySql("select *from admin where username=:name",array(':name'=>'admin'));
Copier après la connexion

3 $exists=Post: :model()->exists($condition, $params);
Cette méthode consiste à demander si le tableau obtenu contient des données selon une condition. S'il y a des données, elle renvoie vrai, sinon elle n'est pas trouvée

4 . Méthode d'ajout

$admin=new Admin;
$admin->username=$username;
$admin->password=$password;
if($admin->save()>0){
  echo "添加成功";
}else{
  echo "添加失败";
}
Copier après la connexion

5. Méthode de modification

1. $condition,$params);

$count = Admin::model()->updateAll(array('username'=>'11111','password'=>'11111'),'password=:pass',array(':pass'=>'1111a1'));
if($count>0){
  echo "修改成功";
}else{
  echo "修改失败";
}
Copier après la connexion

2. Post::model()->updateByPk($pk,$attributes, $condition,$params);

$count = Admin::model()->updateByPk(1,array('username'=>'admin','password'=>'admin'));
$count = Admin::model()->updateByPk(array(1,2),array('username'=>'admin','password'=>'admin'),'username=:name',array(':name'=>'admin'));
if($count>0){
  echo "修改成功";
}else{
  echo "修改失败";
}
Copier après la connexion

$pk代表主键,可以是一个也可以是一个集合,$attributes代表是要修改的字段的集合,$condition代表条件,$params传入的值

3、Post::model()->updateCounters($counters,$condition,$params);

$count =Admin::model()->updateCounters(array('status'=>1),'username=:name',array(':name'=>'admin'));
if($count>0){
  echo "修改成功";
}else{
  echo "修改失败";
}
Copier après la connexion

array('status'=>1)代表数据库中的admin表根据条件username='admin',查询出的所有结果status字段都自加1

六、删除的方法

1、Post::model()->deleteAll($condition,$params);

$count = Admin::model()->deleteAll('username=:name and password=:pass',array(':name'=>'admin',':pass'=>'admin'));
      $id=1,2,3
      deleteAll('id in(".$id.")');删除id为这些的数据
if($count>0){
  echo "删除成功";
}else{
  echo "删除失败";
}
Copier après la connexion

2、Post::model()->deleteByPk($pk,$condition,$params);

$count = Admin::model()->deleteByPk(1);
$count = Admin::model()->deleteByPk(array(1,2),'username=:name',array(':name'=>'admin'));
if($count>0){
  echo "删除成功";
}else{
  echo "删除失败";
}
Copier après la connexion

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于Yii Framework框架获取分类下面的所有子类的方法

如何通过Yii框架使用魔术方法实现跨文件调用的功能  

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!