summer914 2015-09-10 15:45:01 8384次浏览 9条评论 21 10 0

查:
1.findBySql

$sql="select * from tablename where condition"
Modelname::findBySql($sql,array(':id'=>1 or 1=1))->all();   
//返回一个对象。第二个参数是为了防止sql注入
//findBySql是cactiverecord的方法

2.find

$results=modelname::find()->where(['id'=>1])->all();

查询出id=1的记录

$results=modelname::find()->where(['>','id',0])->all();

查询出id大于0的记录

$results=modelname::find()->where(['between','id',0,3])->all();

查询出id在0,3之间的记录

$results=modelname::find()->where(['like','title','keyword'])->all();

查询出标题中和关键字相符的记录

内存使用量优化方法:
1.查询结果转化成数组

$results=modelname::find()->where(['between','id',0,3])->asArray()->all();

2.减少每次取出数据的数量

foreach(modelname::find->batch(2) as $results){
     
}
//每次只查询2条记录,降低内存占用

删:先取出对象再调用对象的delete方法
1.

$result=modelname::find()->where(['id'=>1)->all();
$result[0]->delete();
//删除一条数据
modelname::deleteAll('id>:id',array(':id'=>0));
//删除id大于0的数据

增:创建一个cactiverecord对象,调用他的save方法
1.

$test=new modename();
$test->username='summer';
$test->password='123456';
$test->validate();   //调用rule函数验证数据
if($test->hasErrors()){
echo '数据不合法';
die();
}
$test->save();
//往modelname表中插入了了summer,123456的数据,为了安全和数据的合理性,我们通常会在model文件中定义一个rule函数去验证数据

改:

$result=modelname::find()->where(['id'=>1)->all()->one();
$result->username='lily';
$result->save();

数据表的关联查询:
假设有顾客表(id,name)和订单表(id,price,customer_id)两张表;

1.根据顾客查询订单

$customer=customer::find()->where['name'=>'zhangsan']->one();
$order=$customer->hasMany('Order::className',['customer_id'=>'id'])->asArray()->all();

在model中封装:

public function getOrder(){
    $order=$this->hasMany('Order::className',['customer_id'=>'id'])->asArray()->all();
    return $order;
}

在controller中调用:

$customer=customer::find()->where['name'=>'zhangsan']->one();
$order=$customer->getOrder();
觉得很赞
您需要登录后才可以评论。登录 | 立即注册