YII 数据库操作之 Active Record

Fidelia ·
更新时间:2024-09-21
· 555 次阅读

  Active Record   它的佳应用是模型化数据表为 PHP 结构和执行不包含复杂 SQL 语句的查询。 对于复杂查询的场景,应使用 Yii DAO   建立数据库连接   默认情况下, 它假定 db 应用组件提供了所需的 CDbConnection 数据库连接实例, 如果你想使用一个不是 db 的应用组件,或者如果你想使用 AR 处理多个数据库,你应该覆盖 CActiveRecord::getDbConnection()。   定义 AR 类 class Post extends CActiveRecord { public static function model($className=__CLASS__) { return parent::model($className); } public function tableName() { return 'tbl_post'; // return '{{post}}';  // 使用了表前缀,应该这样返回表名. } }   包含 AR 类的整个目录,配置应用如下 return array( 'import'=>array( 'application.models.*', ), );   如果一个表没有主键,则必须在相应的 AR 类中通过如下方式覆盖 primaryKey() public function primaryKey() { return 'id'; // 对于复合主键,要返回一个类似如下的数组 // return array('pk1', 'pk2'); }   创建记录 $post=new Post; $post->title='sample post'; $post->content='content for the sample post'; $post->create_time=time(); $post->save();   开启 Yii 的 日志功能,我们在应用配置中开启了 CWebLogRoute ,我们将会在每个网页的后看到执行过的 SQL 语句。   读取记录 // 查找满足指定条件的结果中的第一行 $post=Post::model()->find($condition,$params); // 查找具有指定主键值的那一行 $post=Post::model()->findByPk($postID,$condition,$params); // 查找具有指定属性值的行 $post=Post::model()->findByAttributes($attributes,$condition,$params); // 通过指定的 SQL 语句查找结果中的第一行 $post=Post::model()->findBySql($sql,$params);   我们也可以使用 $condition 指定更复杂的查询条件。 $criteria=new CDbCriteria; $criteria->select='title';  // 只选择 'title' 列 $criteria->condition='postID=:postID'; $criteria->params=array(':postID'=>10); $post=Post::model()->find($criteria); // $params 不需要了   一种替代 CDbCriteria 的方法是给 find 方法传递一个数组。 $post=Post::model()->find(array( 'select'=>'title', 'condition'=>'postID=:postID', 'params'=>array(':postID'=>10), ));   与find类似, 有findAll, findAllByPk, findAllByAttributes, findAllBySql方法, 如果没有任何东西符合查询条件,findAll 将返回一个空数组。这跟 find 不同,find 会在没有找到什么东西时返回 null。



active 数据 yii 数据库

需要 登录 后方可回复, 如果你还没有账号请 注册新账号