Heim  >  Artikel  >  php教程  >  Ausführliche Erläuterung des Hinzufügens, Löschens, Änderns und Abfragens von Yii2.0-Datenbankoperationen

Ausführliche Erläuterung des Hinzufügens, Löschens, Änderns und Abfragens von Yii2.0-Datenbankoperationen

黄舟
黄舟Original
2017-01-03 09:32:011648Durchsuche

1. Einfache Abfrage:

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

[[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();    此方法返回一个值指示是否包含查询结果的数据行;
Customer::find()->asArray()->one();    以数组形式返回一条数据;  
  
Customer::find()->asArray()->all();    以数组形式返回所有数据;
Customer::find()->where($condition)->asArray()->one();    根据条件以数组形式返回一条数据;  
  
Customer::find()->where($condition)->asArray()->all();    根据条件以数组形式返回所有数据;
Customer::find()->where($condition)->asArray()->orderBy('id DESC')->all();    根据条件以数组形式返回所有数据,并根据ID倒序;

2. Verwandte Abfrage:

[[ActiveRecord::hasOne()]]:返回对应关系的单条记录
[[ActiveRecord::hasMany()]]:返回对应关系的多条记录[/code]

Anwendungsbeispiel:

);
    }
     
    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();
)->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;]]

[[or]]:

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

[[between]]: not between hat die gleiche Verwendung

<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])]

[[like]]:

//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])]

Darüber hinaus können Sie einen beliebigen Operator wie folgt angeben:

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

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

Häufige Abfragen:

// 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();

Aktualisierung:

//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;]);

Löschen:

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

$model->deleteAll([&#39;id&#39;=>1]);

Batch-Einfügung:

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();

Ausführungs-SQL anzeigen

//UserModel 
$query = UserModel::find()->where([&#39;status&#39;=>1]); 
echo $query->createCommand()->getRawSql();


Das Obige ist Yii2.0 Detaillierte Erläuterungen zu Datenbankoperationen, Hinzufügungen, Löschungen, Änderungen und Abfragen. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).

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