Maison > php教程 > PHP开发 > Explication détaillée de l'ajout, de la suppression, de la modification et de l'interrogation des opérations de la base de données Yii2.0

Explication détaillée de l'ajout, de la suppression, de la modification et de l'interrogation des opérations de la base de données Yii2.0

黄舟
Libérer: 2017-01-03 09:32:01
original
1766 Les gens l'ont consulté

1. Requête simple :

]: 根据查询结果返回查询的第一条记录。

[[all()]]: 根据查询结果返回所有记录。

[[count()]]: 返回记录的数量。

[[sum()]]: 返回指定列的总数。

[[average()]]: 返回指定列的平均值。

[[min()]]: 返回指定列的最小值。

[[max()]]: 返回指定列的最大值。

[[scalar()]]: 返回查询结果的第一行中的第一列的值。

[[column()]]: 返回查询结果中的第一列的值。

[[exists()]]: 返回一个值,该值指示查询结果是否有数据。

[[where()]]: 添加查询条件

[[with()]]: 该查询应执行的关系列表。

[[indexBy()]]: 根据索引的列的名称查询结果。

[[asArray()]]: 以数组的形式返回每条记录。

[code=php]Customer::find()->one();    此方法返回一条数据;

Customer::find()->all();    此方法返回所有数据;

Customer::find()->count();    此方法返回记录的数量;

Customer::find()->average();    此方法返回指定列的平均值;

Customer::find()->min();    此方法返回指定列的最小值 ;

Customer::find()->max();    此方法返回指定列的最大值 ;

Customer::find()->scalar();    此方法返回值的第一行第一列的查询结果;

Customer::find()->column();    此方法返回查询结果中的第一列的值;

Customer::find()->exists();    此方法返回一个值指示是否包含查询结果的数据行;
Copier après la connexion
Customer::find()->asArray()->one();    以数组形式返回一条数据;  
  
Customer::find()->asArray()->all();    以数组形式返回所有数据;
Copier après la connexion
Customer::find()->where($condition)->asArray()->one();    根据条件以数组形式返回一条数据;  
  
Customer::find()->where($condition)->asArray()->all();    根据条件以数组形式返回所有数据;
Copier après la connexion
Customer::find()->where($condition)->asArray()->orderBy('id DESC')->all();    根据条件以数组形式返回所有数据,并根据ID倒序;
Copier après la connexion

2. Requête associée :

[[ActiveRecord::hasOne()]]:返回对应关系的单条记录
[[ActiveRecord::hasMany()]]:返回对应关系的多条记录[/code]
Copier après la connexion

Exemple d'application :

);
    }
     
    public function getCountry()
    {
        //客户和国家是一对一的关系所以用hasOne
        return $this->hasOne(CountrysModel::className(), ['id'=>'Country_id']);
    }
    ....
}
      
// 查询客户与他们的订单和国家
CustomerModel::find()->with('orders', 'country')->all();

// 查询客户与他们的订单和订单的发货地址
CustomerModel::find()->with('orders.address')->all();

// 查询客户与他们的国家和状态为1的订单
CustomerModel::find()->with([
    'orders' => function ($query) {
        $query->andWhere('status = 1');
        },
        'country',
])->all();

:with中的orders对应getOrders

<b>常见问题:</b>

1.在查询时加了->select();如下,要加上order_id,即关联的字段(比如:order_id)比如要在select中,否则会报错:undefined index order_id

// 查询客户与他们的订单和国家
CustomerModel::find()->select(&#39;order_id&#39;)->with(&#39;orders&#39;, &#39;country&#39;)->all();
Copier après la connexion
)->one();  
// 查询年龄为30,状态值为1的客户  
$customer = Customer::findOne([&#39;age&#39; => 30, &#39;status&#39; => 1]);  
$customer = Customer::find()->where([&#39;age&#39; => 30, &#39;status&#39; => 1])->one();  
// 查询key值为10的所有客户  
$customers = Customer::findAll(10);  
$customers = Customer::find()->where([&#39;id&#39; => 10])->all();  
// 查询key值为10,11,12的客户  
$customers = Customer::findAll([10, 11, 12]);  
$customers = Customer::find()->where([&#39;id&#39; => [10, 11, 12]])->all();  
// 查询年龄为30,状态值为1的所有客户  
$customers = Customer::findAll([&#39;age&#39; => 30, &#39;status&#39; => 1]);  
$customers = Customer::find()->where([&#39;age&#39; => 30, &#39;status&#39; => 1])->all();  
  
<b>where()条件:</b>  
  
$customers = Customer::find()->where($cond)->all();   
  
$cond写法举例:  
  
// SQL: (type = 1) AND (status = 2).  
$cond = [&#39;type&#39; => 1, &#39;status&#39; => 2]   
  
// SQL:(id IN (1, 2, 3)) AND (status = 2)  
$cond = [&#39;id&#39; => [1, 2, 3], &#39;status&#39; => 2]   
  
//SQL:status IS NULL  
$cond = [&#39;status&#39; => null]  
  
<b>[[]]</b>:将不同的条件组合在一起,用法举例:  
  
//SQL:`id=1 AND id=2`  
$cond = [&#39;and&#39;, &#39;id=1&#39;, &#39;id=2&#39;]  
  
//SQL:`type=1 AND (id=1 OR id=2)`  
$cond = [&#39;and&#39;, &#39;type=1&#39;, [&#39;or&#39;, &#39;id=1&#39;, &#39;id=2&#39;]]
Copier après la connexion

[[ou]] :

], [&#39;id&#39; => [1, 2, 3]]  
  
<b>[[]]:</b>  
  
//SQL:`NOT (attribute IS NULL)`  
$cond = [&#39;not&#39;, [&#39;attribute&#39; => null]]
Copier après la connexion

[[entre]] : pas entre a le même usage

<b>[[]]: </b>not in 用法类似  
  
//SQL:`id IN (1, 2, 3)`  
$cond = [&#39;in&#39;, &#39;id&#39;, [1, 2, 3]]  
  
//IN条件也适用于多字段  
$cond = [&#39;in&#39;, [&#39;id&#39;, &#39;name&#39;], [[&#39;id&#39; => 1, &#39;name&#39; => &#39;foo&#39;], [&#39;id&#39; => 2, &#39;name&#39; => &#39;bar&#39;]]]  
  
//也适用于内嵌sql语句  
$cond = [&#39;in&#39;, &#39;user_id&#39;, (new Query())->select(&#39;id&#39;)->from(&#39;users&#39;)->where([&#39;active&#39; => 1])]
Copier après la connexion

[[aime]] :

//SQL:`name LIKE &#39;%test%&#39; AND name LIKE &#39;%sample%&#39;`  
$cond = [&#39;like&#39;, &#39;name&#39;, [&#39;test&#39;, &#39;sample&#39;]]  
  
//SQL:`name LIKE &#39;%tester&#39;`  
$cond = [&#39;like&#39;, &#39;name&#39;, &#39;%tester&#39;, false]  
  
<b>[[]]: </b>not exists用法类似  
  
//SQL:EXISTS (SELECT "id" FROM "users" WHERE "active"=1)  
$cond = [&#39;exists&#39;, (new Query())->select(&#39;id&#39;)->from(&#39;users&#39;)->where([&#39;active&#39; => 1])]
Copier après la connexion

De plus, vous pouvez spécifier n'importe quel opérateur comme suit

//SQL:`id >= 10`
$cond = [&#39;>=&#39;, &#39;id&#39;, 10]

//SQL:`id != 10`
$cond = [&#39;!=&#39;, &#39;id&#39;, 10]
Copier après la connexion

Requêtes courantes :

// WHERE admin_id >= 10 LIMIT 0,10
User::find()->select(&#39;*&#39;)->where([&#39;>=&#39;, &#39;admin_id&#39;, 10])->offset(0)->limit(10)->all()
// SELECT `id`, (SELECT COUNT(*) FROM `user`) AS `count` FROM `post` 
 $subQuery = (new Query())->select(&#39;COUNT(*)&#39;)->from(&#39;user&#39;); 
 $query = (new Query())->select([&#39;id&#39;, &#39;count&#39; => $subQuery])->from(&#39;post&#39;);
// SELECT DISTINCT `user_id` ... 
User::find()->select(&#39;user_id&#39;)->distinct();
Copier après la connexion

Mise à jour :

//update();
//runValidation boolen 是否通过validate()校验字段 默认为true 
//attributeNames array 需要更新的字段 
$model->update($runValidation , $attributeNames); 

//updateAll();
//update customer set status = 1 where status = 2
Customer::updateAll([&#39;status&#39; => 1], &#39;status = 2&#39;); 

//update customer set status = 1 where status = 2 and uid = 1;
Customer::updateAll([&#39;status&#39; => 1], [&#39;status&#39;=> &#39;2&#39;,&#39;uid&#39;=>&#39;1&#39;]);
Copier après la connexion

Supprimer :

$model = Customer::findOne($id);
$model->delete();

$model->deleteAll([&#39;id&#39;=>1]);
Copier après la connexion

Insertion par lots :

Yii::$app->db->createCommand()->batchInsert(UserModel::tableName(), [&#39;user_id&#39;,&#39;username&#39;], [
[&#39;1&#39;,&#39;test1&#39;],
[&#39;2&#39;,&#39;test2&#39;],
[&#39;3&#39;,&#39;test3&#39;], 
])->execute();
Copier après la connexion

Voir l'exécution SQL

//UserModel 
$query = UserModel::find()->where([&#39;status&#39;=>1]); 
echo $query->createCommand()->getRawSql();
Copier après la connexion


Ce qui précède est Yii2.0 Explications détaillées des opérations, ajouts, suppressions, modifications et requêtes de la base de données Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !

É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
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal