YII 中的数据库方法

Posted

技术标签:

【中文标题】YII 中的数据库方法【英文标题】:Database approch in YII 【发布时间】:2012-10-19 12:52:08 【问题描述】:

我正在开发我的第一个 YII 网站。我对 YII 数据库有一些疑问。

yii中查询数据库的三种方法。

数据库访问对象 查询生成器 活动记录
    在这三种方法中,哪种方法最安全且最受青睐? 如果我有自定义查询要执行,我应该更喜欢哪种方法?

    在查询生成器查询的情况下,我们明确地选择类似的表

        $user = Yii::app()->db->createCommand()
            ->select('id, username, profile')
            ->from('tbl_user') // explicitly choosing the table
            ->join('tbl_profile p', 'u.id=p.user_id')
            ->where('id=:id', array(':id'=>$id))
            ->queryRow();
    

    那么我应该在哪里编写查询生成器查询?如果我把它们写在相应的表模型中,有什么好处吗?

    如果我使用 DAO 或查询构建器,应该使用哪个类扩展我的模型?

    如果我遵循 DAO 方法或查询构建器方法,如何验证用户输入?

【问题讨论】:

【参考方案1】:

    视情况而定。如果您知道如何安全地使用它们,那么所有这些都同样安全。

    DAO。这是我的意见。

    在模型中。

    Yii 中有两个主要的模型类。 CFormModelCModel。对于查询,请根据 CModel 扩展类。

最后只是一个注释。 DAO 是其中最快的。活动记录最慢。另一方面,主动记录更方便。你是需要决定什么应该是平衡的人。

【讨论】:

为什么要在模型中编写查询生成器查询(表名在它自己的查询中指定)? 无论如何我都不使用查询生成器。但问题是,如果不在模型中,你想在哪里写? 为什么不把它们写在控制器里呢? 否,因为数据库查询不是业务逻辑。如果你愿意,你当然可以。 所以如果我使用 Query Builder 或 DAO 方法,我可以在独立于表的任何模型中编写查询,不是吗?(​​因为在查询本身中指定了表名)【参考方案2】:

您可以使用CActiveRecord 满足您的所有要求。

【讨论】:

以上是关于YII 中的数据库方法的主要内容,如果未能解决你的问题,请参考以下文章

yii2中获取用户名

yii数据库查询操作总结

Yii里增删改查的操作方法

Yii里增删改查的操作方法

yii2数据验证

Yii的数组助手类