這篇文章將為大家詳細(xì)講解有關(guān)如何在YII2框架中使用Query()查詢生成器,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括濱湖網(wǎng)站建設(shè)、濱湖網(wǎng)站制作、濱湖網(wǎng)頁制作以及濱湖網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,濱湖網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到濱湖省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!YII2中的yii\db\Query給我們提供了非常豐富的方法,方便我們構(gòu)建復(fù)雜的SQL語句。
Query()與createCommand較大區(qū)別在于,后者直接使用我們寫好的SQL語句,前者通過參數(shù)和數(shù)據(jù)庫類型生成不同SQL,遷移性更好。
select(['id', 'name']) ->from('{{%user}}') ->all(); //指定where條件查詢 $data2 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where('id=:id', [':id' => '2']) ->all(); //通過one查詢單條記錄 $data3 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where('id=3') ->one(); //判斷記錄是否存在 $exists = (new Query())->from('{{%user}}') ->where('name="aaa"') ->exists(); if ($exists) { echo 'name=aaa 存在'; } //定義字段別名 //注意真實(shí)的字段名寫后面,別名寫前面 $data4 = (new Query())->select(['ids' => 'id', 'names' => 'name']) ->from('{{%user}}') ->where('1=1') ->all(); //通過orderby排序,和limit限制條數(shù) $data5 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where('1=1') ->orderBy('id desc') ->limit(3) ->all(); //多個(gè)and條件 //參數(shù)是數(shù)組,一個(gè)key對(duì)應(yīng)一個(gè)value,默認(rèn)以and拼接 $data6 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where(['id' => 3, 'name' => 'aaa']) ->one(); //in條件 $data7 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where(['id' => [4, 5, 6]]) ->all(); //或者如下方式 $data7_2 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where(['in', 'id', [4, 5, 6]]) ->all(); //count統(tǒng)計(jì) $count = (new Query())->from('{{%user}}')->count(); echo '總記錄數(shù): ', $count; //大于,大于等于,小于,小于等于where條件 $data8 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where(['>=', 'id', 5]) ->all(); $data9 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where(['<=', 'id', 3]) ->all(); //like查詢 $data10 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where(['like', 'name', 'dd']) ->all(); //between篩選和group by分組 //查找出age在18到24之間的,并按sex分組 $data11 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where(['between', 'age', 18, 24]) ->groupBy('sex') ->all(); //having篩選 //按sex分組,然后統(tǒng)計(jì)人數(shù)大于3的 $data12 = (new Query())->select(['sex', 'cnt' => 'count(*)']) ->from('{{%user}}') ->groupBy('sex') ->having('cnt > 3') ->all(); //or邏輯條件 //查找姓名為aaa或bbb的用戶 //之前where數(shù)組是以key=>value方式傳遞的,如果要表達(dá)復(fù)雜邏輯關(guān)系, //數(shù)組第一個(gè)元素必須聲明是什么邏輯,and還是or //第二個(gè)元素表示邏輯左邊 //第三個(gè)元素表示邏輯右邊 $data13 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where(['or', ['name' => 'aaa'], ['name' => 'bbb']]) ->all(); //復(fù)雜的where條件 //我這里只是作為演示 //SELECT `id`, `name` FROM `tb_user` WHERE ((`name`='aaa') OR (`name`='bbb')) OR ((`name`='ccc') OR (`name`='ddd')) $data14 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where([ 'or', [ 'or', ['name' => 'aaa'], ['name' => 'bbb'], ], [ 'or', ['name' => 'ccc'], ['name' => 'ddd'], ], ]) ->all(); //and和or嵌套where條件 //SELECT `id`, `name` FROM `tb_user` WHERE (`sex`=1) AND ((`name` LIKE '%aa%') OR (`name` LIKE '%bb%')) $data15 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where([ 'and', ['sex' => 1], [ 'or', ['like', 'name', 'aa'], ['like', 'name', 'bb'], ], ]) ->all(); //有些時(shí)候我們需要根據(jù)用戶傳遞過來的參數(shù)追加where條件 //追加and條件 $query = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where('sex=1'); //追加age大于18的條件 $query->andWhere(['>', 'age', 18]); echo $query->createCommand()->getRawSql(); //追加or條件 $query2 = (new Query())->select(['id', 'name']) ->from('{{%user}}') ->where(['like', 'name', 'aa']); //追加name相似bb的條件 $query2->orWhere(['like', 'name', 'bb']); echo $query2->createCommand()->getRawSql(); //表別名和連接查詢 //SELECT `u`.`id`, `u`.`name`, `aa`.`item_name` FROM `tb_user` `u` LEFT JOIN `tb_auth_assignment` `aa` ON aa.user_id = u.id $data16 = (new Query())->select(['u.id', 'u.name', 'aa.item_name']) ->from(['u' => '{{%user}}']) ->leftJoin(['aa' => '{{%auth_assignment}}'], 'aa.user_id = u.id') ->all(); } }
關(guān)于如何在YII2框架中使用Query()查詢生成器就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。