天天看點

yii2的model資料庫配置以及應用(主從資料庫配置)

1、多資料庫配置

'db' => require(__DIR__ . '/db.php'),
  'gdb' => require(__DIR__ . '/gdb.php'),           

複制

db或gdb的配置檔案如下:

if (YII_ENV == 'dev') {
    return [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=192.168.1.42;dbname=gather',
        'username' => 'lizhi',
        'password' => '123456',
        'charset' => 'utf8',
    ];
} else {
    return [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=gather',
        'username' => 'gather',
        'password' => 'gather(!2',
        'charset' => 'utf8',
    ];
}           

複制

2、 調用相應的資料庫

/**
     * @return \yii\db\Connection the database connection used by this AR class.
     */
    public static function getDb()
    {
        return Yii::$app->get('gdb');
    }           

複制

當然您也可以用gii進行建立,選擇連接配接池處會出現你多資料庫配置的相應db名稱。如gdb、db

3、主從配置

return [
    'class' => 'yii\db\Connection',
    // 配置從伺服器
    'slaveConfig' => [
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
        'tablePrefix' => '',
        'attributes' => [
            PDO::ATTR_TIMEOUT => 10,
        ],
    ],
    // 配置從伺服器組
    'slaves' => [
        ['dsn' => 'mysql:host=localhost;dbname=chunyun']
    ],
    // 配置主伺服器
    'masterConfig' => [
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
        'attributes' => [// use a smaller connection timeout
            PDO::ATTR_TIMEOUT => 10,
        ],
    ],
    // 配置主伺服器組
    'masters' => [
        ['dsn' => 'mysql:host=localhost;dbname=gather'],
    ]
];           

複制

以上是yii2對資料庫配置的應用。

4、model的方法應用

當然yii2還有一些CDB的類用法,createCommend寫sql這種我不是很推薦了,model自身會去綁定很多的功能讓大家去使用以及了解。

接下來介紹一些model的方法。

(1)beforeValidate方法

save操作之前一般會執行validate驗證方法,顧名思義:validate前做的操作,記住操作後必須傳回true。

可以在此操作中将一些字段賦上預設值之類的,這樣無需每次添加的時候都指派。

因為validate的方法有以下驗證

if (!$this->beforeValidate()) {
    return false;
}           

複制

相對應的還有afterValidate 這個方法我感覺有點雞肋

(2)beforeSave方法

這個一般屬于validate後,save前的方法,一般用來做條件用的,如save前必須什麼資料操作成功,

才能做另外一個save操作這種。當然是用場景多多,看你去使用吧。afterSave就不解釋了。

(3)查詢方面的建議

至于model的資料查詢我就不介紹了,這方面教程肯定挺多的。還有很多朋友會去糾結聯表的事情,

yii2的model裡支援聯表,但是從性能考慮,盡量避免聯表。

如何避免聯表:

如查詢文章清單,其中一項為分類名稱,通過list取出文章分類的清單,将相對應的分類清單中分類名稱,

這樣的操作比聯表效率要高。

如果非聯表不可的可以寫sql,便于以後的維護,構造的sql有有點也有缺點,自己去衡量取舍。

G

M

T

Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

Text-to-speech function is limited to 200 characters

Options : History : Feedback : Donate Close