YII 数据库操作之 Active Record
作者:网络转载 发布时间:[ 2013/11/12 11:16:42 ] 推荐标签:
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。

sales@spasvo.com