加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php – Yii将数据库连接限制为只读

发布时间:2020-05-25 09:21:49 所属栏目:PHP 来源:互联网
导读:我有两个数据库连接,一个用于我的大多数应用程序数据,另一个用于读取. 虽然我可以将我的数据库用户帐户设置为仅允许读取,但还有其他人管理此系统,我希望在应用程序级别有一些冗余,以绝对防止使用Yii的标准ActiveRecord类进行无意的写入. 在论坛上发现了这一点

我有两个数据库连接,一个用于我的大多数应用程序数据,另一个用于读取.

虽然我可以将我的数据库用户帐户设置为仅允许读取,但还有其他人管理此系统,我希望在应用程序级别有一些冗余,以绝对防止使用Yii的标准ActiveRecord类进行无意的写入.

在论坛上发现了这一点信息,但想知道是否有人可以确认这是一个好方法和/或建议另一个.

public function onBeforeSave($event)
{
   $this->db = Yii::app()->masterDb;
}

public function onAfterSave($event)
{
   $this->db = Yii::app()->db;
}

http://www.yiiframework.com/forum/index.php/topic/5712-active-record-save-to-different-server-load-balancefail-over-setup/

根据您提供给Yii论坛的链接,有一个扩展程序可以为您处理:
http://www.yiiframework.com/extension/dbreadwritesplitting

如果你有很多AR型号,我可能会先考虑一下.您可以将行为路线(如该论坛帖子中所示)作为另一种选择.

但无论你做什么,你都希望在toSave / afterSave之前覆盖而不是onBeforeSave / onAfterSave.这些方法用于触发事件,而不仅仅是运行您自己的特殊代码.而且,根据another one of the forum posts,您需要使用静态调用设置AR db变量.所以谢尔盖的代码应该是:

class MyActiveRecord extends CActiveRecord
{
    ...
    public function beforeSave()
    {
       // set write DB
       self::$db = Yii::app()->masterDb;

       return parent::beforeSave();
    }

    public function afterSave()
    {
       // set read db 
       self::$db = Yii::app()->db;

       return parent::beforeSave();
    }
    ...
}


class User extends MyActiveRecord {}
class Post extends MyActiveRecord {}
...

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读