在yii1中curd基本可分为两种:DAO
和AR
DAO
基本格式为
1
2
3
4
5
6
| $user = Yii::app()->db->createCommand()
->select('id, username, profile')
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();
|
在查询时返回的是数组格式,在删除和修改增加时代码的简介程度不如AR
eg:$command = Yii::app()->db->createCommand();
insert()
1
2
3
4
| $command->insert('tbl_user', array(
'name'=>'Tester',
'email'=>'tester@example.com',
));
|
update()
1
2
3
| $command->update('tbl_user', array(
'name'=>'Tester',
), 'id=:id', array(':id'=>1));
|
delete()
1
| $command->delete('tbl_user', 'id=:id', array(':id'=>1));
|
AR
在AR查询的时候返回的对象,Active Record (AR) 是一个流行的 对象-关系映射 (ORM)
技术,如果要查询多个数据的时候在访问时会产生一些未知的bug且不利于快速开发,个人在开发是选择用DAO的查询去查找多个记录。
而AR的插入,修改,删除会简单一些,
eg:
插入
1
2
3
4
| $post=new Post;
$post->title='sample post';
$post->content='post body content';
$post->save();
|
修改
1
2
3
4
5
6
| // 更新符合指定条件的行
Post::model()->updateAll($attributes,$condition,$params);
// 更新符合指定条件和主键的行
Post::model()->updateByPk($pk,$attributes,$condition,$params);
// 更新满足指定条件的行的计数列
Post::model()->updateCounters($counters,$condition,$params);
|
删除
1
| Post::model()->deleteAll($condition,$params);
|
读取
1
| Post::model()->deleteAll($condition,$params);
|
联表查询left join
1
2
3
4
5
6
| $travelers = $this->getDbConnection()->createCommand()
->select('t.id, t.last_name, t.first_name, t.birth, t.sex, t.country, tc.card_type, tc.card_no, tc.card_expire')
->from($this->tableName() . ' t')
->leftJoin(TravelerCert::model()->tableName() . ' tc', 'tc.traveler_id = t.id')
->where('t.id = :id and tc.card_type = :type', array(':id' => $id, ':type' => $type))
->queryRow();
|