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 中有两个主要的模型类。 CFormModel
和 CModel
。对于查询,请根据 CModel 扩展类。
最后只是一个注释。 DAO 是其中最快的。活动记录最慢。另一方面,主动记录更方便。你是需要决定什么应该是平衡的人。
【讨论】:
为什么要在模型中编写查询生成器查询(表名在它自己的查询中指定)? 无论如何我都不使用查询生成器。但问题是,如果不在模型中,你想在哪里写? 为什么不把它们写在控制器里呢? 否,因为数据库查询不是业务逻辑。如果你愿意,你当然可以。 所以如果我使用 Query Builder 或 DAO 方法,我可以在独立于表的任何模型中编写查询,不是吗?(因为在查询本身中指定了表名)【参考方案2】:您可以使用CActiveRecord 满足您的所有要求。
【讨论】:
以上是关于YII 中的数据库方法的主要内容,如果未能解决你的问题,请参考以下文章