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