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。