前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >yii2的model数据库配置以及应用(主从数据库配置)

yii2的model数据库配置以及应用(主从数据库配置)

作者头像
botkenni
发布2019-09-02 17:26:11
1.4K0
发布2019-09-02 17:26:11
举报
文章被收录于专栏:IT码农IT码农

1、多数据库配置

代码语言:javascript
复制
  'db' => require(__DIR__ . '/db.php'),
  'gdb' => require(__DIR__ . '/gdb.php'),

db或gdb的配置文件如下:

代码语言:javascript
复制
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、 调用相应的数据库

代码语言:javascript
复制
/**
     * @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、主从配置

代码语言:javascript
复制
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的方法有以下验证

代码语言:javascript
复制
 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档