目录

yii1 curd操作

在yii1中curd基本可分为两种:DAOAR

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();