亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 php框架 YII Yii2.0 數(shù)據庫操作增刪改查詳解

Yii2.0 數(shù)據庫操作增刪改查詳解

Nov 01, 2019 pm 04:51 PM
yii 數(shù)據庫

Yii2.0 數(shù)據庫操作增刪改查詳解

1.簡單查詢:

one(): 根據查詢結果返回查詢的第一條記錄。
all(): 根據查詢結果返回所有記錄。
count(): 返回記錄的數(shù)量。
sum(): 返回指定列的總數(shù)。
average(): 返回指定列的平均值。
min(): 返回指定列的最小值。
max(): 返回指定列的最大值。
scalar(): 返回查詢結果的第一行中的第一列的值。
column(): 返回查詢結果中的第一列的值。
exists(): 返回一個值,該值指示查詢結果是否有數(shù)據。
where(): 添加查詢條件
with(): 該查詢應執(zhí)行的關系列表。
indexBy(): 根據索引的列的名稱查詢結果。
asArray(): 以數(shù)組的形式返回每條記錄。

應用實例:

Customer::find()->one();    此方法返回一條數(shù)據;
Customer::find()->all();    此方法返回所有數(shù)據;
Customer::find()->count();    此方法返回記錄的數(shù)量;
Customer::find()->average();    此方法返回指定列的平均值;
Customer::find()->min();    此方法返回指定列的最小值 ;
Customer::find()->max();    此方法返回指定列的最大值 ;
Customer::find()->scalar();    此方法返回值的第一行第一列的查詢結果;
Customer::find()->column();    此方法返回查詢結果中的第一列的值;
Customer::find()->exists();    此方法返回一個值指示是否包含查詢結果的數(shù)據行;
Customer::find()->asArray()->one();    以數(shù)組形式返回一條數(shù)據;
Customer::find()->asArray()->all();    以數(shù)組形式返回所有數(shù)據;
Customer::find()->where($condition)->asArray()->one();    根據條件以數(shù)組形式返回一條數(shù)據;
Customer::find()->where($condition)->asArray()->all();    根據條件以數(shù)組形式返回所有數(shù)據;
Customer::find()->where($condition)->asArray()->orderBy('id DESC')->all();    根據條件以數(shù)組形式返回所有數(shù)據,并根據ID倒序;

2.關聯(lián)查詢:

ActiveRecord::hasOne():返回對應關系的單條記錄
ActiveRecord::hasMany():返回對應關系的多條記錄

應用實例:

//客戶表Model:CustomerModel 
//訂單表Model:OrdersModel
//國家表Model:CountrysModel
//首先要建立表與表之間的關系 
//在CustomerModel中添加與訂單的關系
      
Class CustomerModel extends yiidbActiveRecord
{
    ...
    
    public function getOrders()
    {
        //客戶和訂單是一對多的關系所以用hasMany
        //此處OrdersModel在CustomerModel頂部別忘了加對應的命名空間
        //id對應的是OrdersModel的id字段,order_id對應CustomerModel的order_id字段
        return $this->hasMany(OrdersModel::className(), ['id'=>'order_id']);
    }
     
    public function getCountry()
    {
        //客戶和國家是一對一的關系所以用hasOne
        return $this->hasOne(CountrysModel::className(), ['id'=>'Country_id']);
    }
    ....
}
      
// 查詢客戶與他們的訂單和國家
CustomerModel::find()->with('orders', 'country')->all();

// 查詢客戶與他們的訂單和訂單的發(fā)貨地址
CustomerModel::find()->with('orders.address')->all();

// 查詢客戶與他們的國家和狀態(tài)為1的訂單
CustomerModel::find()->with([
    'orders' => function ($query) {
        $query->andWhere('status = 1');
        },
        'country',
])->all();

注:with中的orders對應getOrders

常見問題:

在查詢時加了->select();如下,要加上order_id,即關聯(lián)的字段(比如:order_id)比如要在select中,否則會報錯:undefined index order_id

// 查詢客戶與他們的訂單和國家
CustomerModel::find()->select('order_id')->with('orders', 'country')->all();
findOne()和findAll():

// 查詢key值為10的客戶
$customer = Customer::findOne(10);
$customer = Customer::find()->where(['id' => 10])->one();
// 查詢年齡為30,狀態(tài)值為1的客戶
$customer = Customer::findOne(['age' => 30, 'status' => 1]);
$customer = Customer::find()->where(['age' => 30, 'status' => 1])->one();
// 查詢key值為10的所有客戶
$customers = Customer::findAll(10);
$customers = Customer::find()->where(['id' => 10])->all();
// 查詢key值為10,11,12的客戶
$customers = Customer::findAll([10, 11, 12]);
$customers = Customer::find()->where(['id' => [10, 11, 12]])->all();
// 查詢年齡為30,狀態(tài)值為1的所有客戶
$customers = Customer::findAll(['age' => 30, 'status' => 1]);
$customers = Customer::find()->where(['age' => 30, 'status' => 1])->all();

where()條件:

$customers = Customer::find()->where($cond)->all(); 

$cond寫法舉例:

// SQL: (type = 1) AND (status = 2).
$cond = ['type' => 1, 'status' => 2] 

// SQL:(id IN (1, 2, 3)) AND (status = 2)
$cond = ['id' => [1, 2, 3], 'status' => 2] 

//SQL:status IS NULL
$cond = ['status' => null]

[[and]]:將不同的條件組合在一起,用法舉例:

//SQL:`id=1 AND id=2`
$cond = ['and', 'id=1', 'id=2']

//SQL:`type=1 AND (id=1 OR id=2)`
$cond = ['and', 'type=1', ['or', 'id=1', 'id=2']]

[[or]]:

//SQL:`(type IN (7, 8, 9) OR (id IN (1, 2, 3)))`
$cond = ['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]]

[[not]]:

//SQL:`NOT (attribute IS NULL)`
$cond = ['not', ['attribute' => null]]

[[between]]: not between 用法相同

//SQL:`id BETWEEN 1 AND 10`
$cond = ['between', 'id', 1, 10]

[[in]]: not in 用法類似

//SQL:`id IN (1, 2, 3)`
$cond = ['in', 'id', [1, 2, 3]]

//IN條件也適用于多字段
$cond = ['in', ['id', 'name'], [['id' => 1, 'name' => 'foo'], ['id' => 2, 'name' => 'bar']]]

//也適用于內嵌sql語句
$cond = ['in', 'user_id', (new Query())->select('id')->from('users')->where(['active' => 1])]

[[like]]:

//SQL:`name LIKE '%tester%'`
$cond = ['like', 'name', 'tester']

//SQL:`name LIKE '%test%' AND name LIKE '%sample%'`
$cond = ['like', 'name', ['test', 'sample']]

//SQL:`name LIKE '%tester'`
$cond = ['like', 'name', '%tester', false]

[[exists]]: not exists用法類似

//SQL:EXISTS (SELECT "id" FROM "users" WHERE "active"=1)
$cond = ['exists', (new Query())->select('id')->from('users')->where(['active' => 1])]
此外,您可以指定任意運算符如下

//SQL:`id >= 10`
$cond = ['>=', 'id', 10]

//SQL:`id != 10`
$cond = ['!=', 'id', 10]

常用查詢:

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

更新:

//update();
//runValidation boolen 是否通過validate()校驗字段 默認為true 
//attributeNames array 需要更新的字段 
$model->update($runValidation , $attributeNames);  

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

//update customer set status = 1 where status = 2 and uid = 1;
Customer::updateAll(['status' => 1], ['status'=> '2','uid'=>'1']);

刪除:

$model = Customer::findOne($id);
$model->delete();
$model->deleteAll(['id'=>1]);

批量插入:

Yii::$app->db->createCommand()->batchInsert(UserModel::tableName(), ['user_id','username'], [
    ['1','test1'],
    ['2','test2'],
    ['3','test3'],   
])->execute();

查看執(zhí)行sql

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

推薦教程:YII教程

以上是Yii2.0 數(shù)據庫操作增刪改查詳解的詳細內容。更多信息請關注PHP中文網其他相關文章!

本站聲明
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

REDIS:與傳統(tǒng)數(shù)據庫服務器的比較 REDIS:與傳統(tǒng)數(shù)據庫服務器的比較 May 07, 2025 am 12:09 AM

Redis在高并發(fā)和低延遲場景下優(yōu)于傳統(tǒng)數(shù)據庫,但不適合復雜查詢和事務處理。1.Redis使用內存存儲,讀寫速度快,適合高并發(fā)和低延遲需求。2.傳統(tǒng)數(shù)據庫基于磁盤,支持復雜查詢和事務處理,數(shù)據一致性和持久性強。3.Redis適用于作為傳統(tǒng)數(shù)據庫的補充或替代,但需根據具體業(yè)務需求選擇。

學習SQL:了解挑戰(zhàn)和獎勵 學習SQL:了解挑戰(zhàn)和獎勵 May 11, 2025 am 12:16 AM

學習SQL需要掌握基礎知識、核心查詢、復雜JOIN操作和性能優(yōu)化。1.理解表、行、列等基本概念和不同SQL方言。2.熟練使用SELECT語句進行查詢。3.掌握JOIN操作從多表獲取數(shù)據。4.優(yōu)化查詢性能,避免常見錯誤,使用索引和EXPLAIN命令。

將Laravel項目遷移到YII是否容易? 將Laravel項目遷移到YII是否容易? May 09, 2025 am 12:01 AM

crigatingalaravel projectToyiiishallingButachieffable withiefleflant.1)mapoutlaravel組件likeoutes,控制器和模型。2)Translatelaravel's sartisancancancommandeloequorentoottooyii的giiandeteverecordeba

如何在Windows/Linux上安裝MySQL 8.0? 如何在Windows/Linux上安裝MySQL 8.0? Jun 11, 2025 pm 03:25 PM

安裝MySQL8.0的關鍵在于按步驟操作并注意常見問題。Windows上推薦使用MSI安裝包,步驟包括下載安裝包、運行安裝程序、選擇安裝類型、設置root密碼、啟用服務啟動,并注意端口沖突或手動配置ZIP版;Linux(如Ubuntu)則通過apt安裝,步驟為更新源、安裝服務器、運行安全腳本、檢查服務狀態(tài)及修改root認證方式;無論哪個平臺,都應修改默認密碼、創(chuàng)建普通用戶、設置防火墻、調整配置文件以優(yōu)化字符集等參數(shù),確保安全性與正常使用。

YII開發(fā)人員:高級與初中 YII開發(fā)人員:高級與初中 May 24, 2025 am 12:10 AM

資深Yii開發(fā)者與初級Yii開發(fā)者的主要區(qū)別在于經驗、技能深度和思維方式。1.資深開發(fā)者關注性能優(yōu)化和代碼重構,使用Yii的緩存機制等提升應用性能。2.他們深入理解Yii的底層原理,參與架構設計和技術決策,使用模塊化設計構建靈活的應用。3.資深開發(fā)者注重項目整體規(guī)劃和長遠發(fā)展,扮演導師角色。初級開發(fā)者則需通過學習和實踐逐步提升,最終成長為資深開發(fā)者。

查看MongoDB中所有數(shù)據庫的方法 查看MongoDB中所有數(shù)據庫的方法 Jun 04, 2025 pm 10:42 PM

在MongoDB中查看所有數(shù)據庫的方法是輸入命令“showdbs”。1.該命令只顯示非空數(shù)據庫。2.可以通過“use”命令切換數(shù)據庫并插入數(shù)據使其顯示。3.注意內部數(shù)據庫如“l(fā)ocal”和“config”。4.使用驅動程序時需用“l(fā)istDatabases()”方法獲取詳細信息。5.“db.stats()”命令可查看數(shù)據庫詳細統(tǒng)計信息。

sql數(shù)據庫語句大全 sql數(shù)據庫常用語句匯總 sql數(shù)據庫語句大全 sql數(shù)據庫常用語句匯總 May 28, 2025 pm 08:12 PM

SQL常用語句包括:1.CREATETABLE創(chuàng)建表,如CREATETABLEemployees(idINTPRIMARYKEY,nameVARCHAR(100),salaryDECIMAL(10,2));2.CREATEINDEX創(chuàng)建索引,如CREATEINDEXidx_nameONemployees(name);3.INSERTINTO插入數(shù)據,如INSERTINTOemployees(id,name,salary)VALUES(1,'JohnDoe',75000.00);4.SELECT查

我什么時候應該使用redis代替?zhèn)鹘y(tǒng)數(shù)據庫? 我什么時候應該使用redis代替?zhèn)鹘y(tǒng)數(shù)據庫? May 13, 2025 pm 04:01 PM

用戶edisinsteadofatraditionaldatabasewhenyourapplicationrequirespeedandreal-timedataprocorsing,sueAsAsforCaching,sessionmanagement,orrereal-timeanalytics.redisexcelsin:1)caching,緩存,減少載荷載量

See all articles