Heim > php教程 > PHP开发 > Hauptteil

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

黄舟
Freigeben: 2017-01-03 09:32:01
Original
1705 Leute haben es durchsucht

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

2. Verwandte Abfrage:

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

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();
Nach dem Login kopieren
)->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;]]
Nach dem Login kopieren

[[or]]:

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

[[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])]
Nach dem Login kopieren

[[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])]
Nach dem Login kopieren

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]
Nach dem Login kopieren

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();
Nach dem Login kopieren

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;]);
Nach dem Login kopieren

Löschen:

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

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

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();
Nach dem Login kopieren

Ausführungs-SQL anzeigen

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


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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!