Home > php教程 > PHP开发 > body text

Detailed explanation of addition, deletion, modification and query of Yii2.0 database operations

黄舟
Release: 2017-01-03 09:32:01
Original
1705 people have browsed it

1. Simple query:

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

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

2. Related query:

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

Application example:

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

[[or]]:

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

[[between]]: not between Same 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])]
Copy after login

[[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])]
Copy after login

Also, you can specify any operator as follows

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

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

Commonly used Query:

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

Update:

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

Delete:

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

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

Batch insert:

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();
Copy after login

View execution sql

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


The above is the detailed explanation of the addition, deletion, modification and query of Yii2.0 database operations. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!