yii 简单操作

1渲染html及赋值过去

a.控制器写个方法

public function  actionConsu(){
    $hello_str="您好!";
    $a=array('很开心','看到你');
    //创建一个数组
    
$data=array();
    $data['view_str']=$hello_str;
    $data['a_str']=$a;
    return$this->render('consu',$data);
}

b.接值及写表单值即将提交的地址及方法

<?php
use
yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?php
$form= ActiveForm::begin([
    'action'=> ['site/consuadd'],
    'method'=>'post',
]);
?>
<!doctypehtml>
<htmllang="en">
<head>
    <metacharset="UTF-8">
    <title>在线咨询</title>
</head>
<body>
<center>
    <h2>请输入咨询内容</h2>
    <?=$view_str;?>
    <?=
$a_str[0];?>
    <?=
$a_str[1];?>
    
<textareaname="desc"cols="60"rows="10"class="b"></textarea>
    <inputtype="submit"value="提交"class="a"/>
    <h2class="c"></h2>
</center>
</body>
</html>

 

 

 

 

2接表单的值。及入库

a.接值处理数据 在顶上要use models

$request= Yii::$app->request;
$a=$request->post('desc');

$test=new Text;
$test->title=$a;
$test->save();

3 展示数据)

a.写个方法(new model、查数据

public functionactionConsulist(){
    $text=newText();
    $arr=$text->find();
    $pages= newPagination([
        //'totalCount' => $countQuery->count(),
        
'totalCount'=> $arr->count(),
        'pageSize'   =>2   //每页显示条数
    
]);
    $models= $arr->offset($pages->offset)
        ->limit($pages->limit)
        ->all();
    return$this->render('consulist', [
        'models'=> $models,
        'pages'  =>$pages
    ]);

 

b.展示页面

<?php
use
yii\widgets\LinkPager;
foreach($modelsas $k=>$v){
    echo"<tr>";
    echo"<td>".$v['id']."</td>";
    echo"<td>".$v['title']."</td>";
    echo"<td>".$v['desc']."</td>";
    echo"</tr>";
}
echo LinkPager::widget([
    'pagination'=> $pages,
]);
?>

4单列删除数据

a处理地址及传值

<td><ahref="index.php?r=site/consudel&id=<?php echo$v['id']?>">删除</a></td>

b//删除咨询
public functionactionConsudel(){
    $res=newYii::$app->request;
    $id=$res->get('id');
    $result=Text::find()->where(['id'=>$id])->all();
    $result[0]->delete();
}

5 部分按条件查询

  $sql= "select * from text where id= :id";
      $results=  Text::findBySql($sql,array(':id'=>'1 or 1=1'))->all();
        $results=Text::find()->where(['id'=>1])->all();//等于1
        
$results=Text::find()->where(['>','id',1])->all();//大于1
        
between>=3<=5
        $results=Text::find()->where(['between','id',3,5])->all();//2和5之间
        print_r
(count($results));//获取条数
        
like title'%好孩子% '
        
$results=Text::find()->where(['like','title','加油'])->all();//2和5之间
                
$results=Text::find()->where(['>','id',1])->asArray()->all();//大于1结果转化成数组
批量查询
        
foreach
(Text::find()->batch(3)as $texts){
print_r(count($texts));
        }
        print_r($results);

yii常用 获取登录用户信息
1. 获取控制器名
  在控制器中获取控制器名:       $this->getId();
  在视图中获取控制器名:           Yii::app()->controller->id;
2. 获取动作名
  在控制器beforeAction()回调函数中获取动作名: $name = $action->id
  在其他地方获取动作名:$this->getAction()->getId();
  任何地方   Yii::app()->controller->Action->id;
  获取当前用户id YII:app()->user->id
判断是否已经登录
if(Yii::$app->user->isGuest){
echo '还没登录,去登录页面';
}else{
echo '已经登录了,去干登录后该干的事';
}

隐藏域

<?=$form->field($model,'pid')->textInput()->hiddenInput(['value'=>$id])?>;

单选框

<?=$form->field($model,'personals')->radioList(['0'=>'个人','1'=>'企业'])?>

获取当前用户名。id

$a= yii::$app->user->identity->username;

$a= yii::$app->user->identity->id;

判断是否已经登录
if(Yii::$app->user->isGuest){
    return  $this->render('add',['id'=>0]);没登上
}else{
    $id= yii::$app->user->identity->id;登上了
       return  $this->render('add',['id'=>$id]);
}

视图层超链接

          <?php useyii\helpers\Url;?>
<li><ahref="<?php echoUrl::to(['home/login']);?>"rel="nofollow">登录</a></li>

 

 

Yii2 获取模块名、控制器名、方法名

在视图中: 

    模块名  $this->context->module->id

    控制器名 $this->context->id

    方法名 $this->context->action->id

在控制器中

     模块名   Yii::$app->controller->module->id;

     控制器名   Yii::$app->controller->id

     方法名  Yii::$app->controller->action->id; 

    模块名 $this->module->id;

    控制器名 $this->id;

     方法名  $this->action->id

在控制器的 beforeAction 方法中(方法接收$action参数)

    模块名  $action->controller->module->id;

    控制器名 $action->controller->id;

方法名  $action->id;

图片上传

最开始的model  在入口文件同级建一个uploads文件夹

<?php
namespace
app\models;
use yii\base\Model;
use yii\web\UploadedFile;


class UploadForm extends Model
{
    /**
     *
@varUploadedFile[]
     */
    
public$imageFiles;

    public functionrules()
    {
        return[
            [['imageFiles'],'file','skipOnEmpty'=> false,'extensions'=> 'png, jpg','maxFiles' => 4],
        ];
    }

    public functionupload()
    {
        if($this->validate()) {
            foreach($this->imageFilesas $file) {
//                $file->saveAs('uploads/' . $file->baseName . '.' . $file->extension);
                
$file->saveAs('uploads/'. $file->baseName. '.' .$file->extension);

            }
            return true;
        } else {
            return false;
        }
    }
}
?>

 

1 渲染页面

public functionactionUpload(){
    $model= newUploadForm();
    return$this->render('peruseradd''model'=> $model,
    ]);
}

2 视图层

useyii\widgets\ActiveForm;

<?php$form = ActiveForm::begin([
    'action'=> ['per/peradduser'],
    'method'=>'post',
    'options'=> ['enctype'=> 'multipart/form-data'],
]); ?>

 

<?=$form->field($model,'imageFiles[]')->fileInput(['multiple'=> true,'accept' => 'image/*'])?>

<?phpActiveForm::end();?>

3控制器上传

    public functionactionPeradduser(){
        $model= newUploadForm();
        if(Yii::$app->request->isPost) {
            $imginfo=$model->imageFiles= UploadedFile::getInstances($model,'imageFiles');
//            print_r($imginfo);die;
            
$img_name=$imginfo[0]->name;
            $img_path='uploads/'.$img_name;
        }
        $post= \Yii::$app->request->post();
        $list_models= new\app\models\Admin;
        $data= ['username'=>$post['username'],
            'email'=>$post['email'],
            'pwd'=>$post['pwd'],
           'timestamp'=>date("Y-m-d H:i:s"),
            'img'=>$img_path,
        ];
        $list_models->setAttributes($data);
        $list_models->insert();
        if($model->upload()) {
            $this->redirect('?r=per/peruserlist');
            return;
        }
    }

 

 

 

 

Ajax传多值及上传

public function actionAddcv()

{

$session = Yii::$app->session;

$id = $session['id'];

$data = $_POST;

$img = $_FILES;

 

$upload=new UploadedFile(); //实例化上传类

 

$img=$_FILES['head_img']; //获取上传文件参数

$name = $img['name'];

$upload->tempName=$img['tmp_name']; //设置上传的文件的临时名称

$img_path='uploadss/'.$name; //设置上传文件的路径名称(这里的数据进行入库)

$arr=$upload->saveAs($img_path); //保存文件

 

$data['uid'] = $id;

$data['add_time'] = time();

$data['head_img'] = $img_path;

 

$models = new \app\models\Cv;

$num = $models->find()->where(['uid'=>$id])->asArray()->all();

$res = count($num);

if($res>=3)

{

echo 3;

return false;

}

$models->setAttributes($data);

$result = $models->insert();

if($result)

{

echo 1;

}

}

Ajax的

$('#sub').click(function(){

        var file = new FormData(document.getElementById('form'));

        var url = "?r=cv/addcv";

 

     

        $.ajax({

            url:url,

            type:'post',

            data:file,

            dataType:'json',

            processData:false,

            contentType:false,

            success:function(msg){

            if(msg==1)

            {

             alert('ok')

            }

            

            }

        });

})

//简单上传

//普通项目上传图片及经验
public functionactionXiangmupu(){
    $session= Yii::$app->session;
    $data=$_POST;
    $data['me_id'] = $session->get('id');
    $img=$_FILES['pic'];//获取上传文件参数
    
$name= $img['name'];
    $upload=newUploadedFile();//实例化上传类
    
$upload->tempName=$img['tmp_name'];//设置上传的文件的临时名称
    
$img_path='uploads/'.$name;//设置上传文件的路径名称(这里的数据进行入库)
    
$upload->saveAs($img_path);//保存文件
    
$data['workpic']=$img_path;
    $models= new\app\models\Xiangmudesc();//完善教育信息
    
$models->setAttributes($data);

    $result= $models->insert();
    if($result){
        echo1;
    }else{
        echo2;
    }
}

//发送邮件
public functionactionEmail(){
   $email=$_POST['email'];
    $mail= Yii::$app->mailer->compose();
    $mail->setTo($email);  //接收人邮箱
    
$mail->setSubject("test");//邮件标题
    
$mail->setHtmlBody("wo shi chen yan");//发送内容(可写HTML代码)
    
if($mail->send()){
        echo"邮件发送成功";
    }else{
        echo"邮件发送失败";

 
    }
}

 

//配置信息

'mailer'=> [
    'class'=> 'yii\swiftmailer\Mailer',
    'useFileTransport'=> false,
    'transport'=> [
        'class'=> 'Swift_SmtpTransport',
        'host'=> 'smtp.163.com',  //每种邮箱的host配置不一样
        
'username'=> '888888888888888@163.com',   //发件人邮箱
        
'password'=> '188888888888888888888',//授权码
        
'port'=> '25',
        'encryption'=> 'tls',
    ],

'messageConfig'=>[
    'charset'=>'UTF-8',
    'from'=>['18888888888888888888888888888881@163.com'=>'chen']  //发件人昵称
],

//我的QQ授权码

//来自小伟

//加入组件
        $request=YII::$app->request;
        //调用组件里面的方法   接受git传值   第二个参数为默认值
        $id=$request->get('id',20);    
        //调用组件里面的方法    接受post传值 第二个参数为默认值
        $id=$request->post('id',20);
        //判断是否是git传值
    $request->isGet
        //判断是否是post传值
    $request->isPost
       //获取个人iP地址
                 echo $request->userIP;
        //文件下载
       $request->headers->add('content-disposition','attachment;filename="a.jpg"');
        //文件下载封装函数     默认找web目录下的文件
       $request->sendFile('./robots.txt');


//加载session组件
        $session=\YII::$app->session;
        //开启session
        $session->open();
        //检查session是否开启   默认没有开启  如果开启则返回真
        if($session->isActive){
            echo  '开启session';
        }
        //设置session
       $session->set('user','张三');
       //取出session值
        echo $session->get('user');
      //取出session值
        echo $session->get('user');
      //可以使用数组方式存储session
      $session['user']='张三';
       echo $session['user'];
       unset($session['user']);
      //删除全部的session
        $session->removeAll();
    


//加载cookie组件
        $cookie=\YII::$app->response->cookies;
        //设置cookie数据   name   value
        $cookie_data=array('name'=>'user','value'=>'张三');
        //实例化cookie类传入数据
        $cookie->add(new Cookie($cookie_data));
       //删除cookie
        $cookie->remove('user');    

//加载请求组件
        $cookie=\YII::$app->request->cookies;
       //获取cookie的值   第二个参数代表如果没有该cookie的返回值
        echo $cookie->getValue('users',20);



//加入响应组件
         $res=\YII::$app->response;
        //设置statuscode 404
         $res->statusCode='404';
        //告诉浏览器一旦接受到消息,不用缓存到浏览器里
         $res->headers->add('pragma','no-cache');
        //告诉浏览器一旦接受到消息,缓存5秒
         $res->headers->set('pragma','max-age=5');
          //删除
        $res->headers->remove('pragma');

 //跳转
        $this->redirect('https://www.baidu.com',302);
    

//赋值
        $data='啊哈哈';
        //展示YII自带样式         //传值
       return $this->render('show',array('data'=>$data));    

//展示YII自带样式    并且把值放入$content变量当中
        return $this->render('show');

//直接输出自己的html页面
        return  $this->renderPartial('show');



//引入html类
use yii\helpers\Html;
//转译html代码成实体  没有任何意义
<?php echo Html::encode($data); ?>

//引入过滤类
use yii\helpers\HtmlPurifier;
<!--//过滤js代码-->
<?php echo HtmlPurifier::process($data); ?>


//引入自己所定义好的样式
    public $layout='commen';

//在视图里面引入第二页面  当然也可以通过第二个参数 向其他视图传值
<!--引入其他视图-->
<?php echo $this->render('shows'); ?>

//创建(替换)数据块 在视图里面
<?php $this->beginBlock('block1'); ?>
<h1>喂喂喂</h1>
<?php $this->endBlock(); ?>
//然后再公共的commen里面使用就会输出内容
<?php
    if(isset($this->blocks['block1']))
    {
        echo $this->blocks['block1'];
    }else{
        echo  '<h1>阿萨达速度</h1>';
    }
?>



操作数据库

创建模型
<?php
namespace frontend\models;
use Yii;
use yii\base\Model;
use yii\db\ActiveRecord;

class My_category_major extends ActiveRecord{

}
?>
控制器使用模型
//查看数据库配置信息
$db=Yii::$app->db;


//引入model模型
use frontend\models\My_category_major;
 //查询数据
        $sql="SELECT * FROM my_category_major";
        //该执行会让每条语句变成一组对象然后形成一个数组
        $all=My_category_major::findBySql($sql)->all();


 //防止sql注入
        $id='2';
        //查询数据
        $sql="SELECT * FROM my_category_major WHERE id=:id";
        //该执行会让每条语句变成一组对象然后形成一个数组
        $all=My_category_major::findBySql($sql,array(':id'=>$id))->all();

 //封装后的函数
    查询并且加where条件    id=1
        $content=My_category_major::find()->where(array('id'=>1))->all();
//封装后的函数     查询并且加where条件    id>0
        $content=My_category_major::find()->where(array('>','id',0))->all();
//封装后的函数     查询并且加where条件    id>=1 并且 id<=2
        $content=My_category_major::find()->where(array('between','id',1,2))->all();
//封装后的函数     查询并且加where条件    id like '%1%'
        $content=My_category_major::find()->where(array('like','id','1'))->all();
//封装后的函数     查询并且加where条件   讲对象转换成数组
        $content=My_category_major::find()->where(array('like','id','1'))->asArray()->all();
 //批量查询
        foreach(My_category_major::find()->batch(2) as $content){
            print_r(count($content));
        }
 // 获取 country 表的所有行并以 name 排序
        //$countries = Country::find()->orderBy('name')->asArray()->all();
// 获取主键为 “US” 的行
        $country = Country::findOne('US');
        // 输出 “United States”
        echo $country->name;
// 修改 name 为 “U.S.A.” 并在数据库中保存更改
        $country->name = 'U.S.A.';
        $country->save();

//修改
 My_nav::updateAll(['nid'=>$nid],$data);




  //删除数据
        $results=My_category_major::find()->where(['id'=>83])->all();
        $results[0]->delete();
 //删除数据
        My_category_major::deleteAll('id>:id',array(':id'=>83));


//添加数据
$My_category_major=new My_category_major;
$My_category_major->categoryname='我的类';
$My_category_major->save();

加入验证
class My_category_major extends ActiveRecord{
    public function rules(){
        return [
            //验证是否是整型
            ['id','integer'],
            //验证是否是字符串   0-5位的长度
            ['categoryname','string','length'=>[0,5]]
        ];
    }
}

 //添加数据
        $My_category_major=new My_category_major;
        //设置数据
        $My_category_major->categoryname="字符串";
        //调用方法 启用rules验证
        $My_category_major->validate();
        //判断校验是否有错误
        if($My_category_major->hasErrors()){
            echo "数据不合法";
            die;
        }
        $My_category_major->save();


 //修改数据    查询获得一维数组  条件ID=87
        $content=My_category_major::find()->where(['id'=>87])->one();
        $content->categoryname='张高伟';
        $content->save();






//关联查询


创建My_members   My_members_log的ActiveRecord
//引入ActiveRecord模型
use frontend\models\My_members;
use frontend\models\My_members_log;

        $content=My_members::find()->where(['username'=>'993013863@qq.com'])->one();
        //调用关联方法      第一个是表模型        第二个是数组(id相反)
        $log=$content->hasMany('frontend\models\My_members_log',['log_uid'=>'uid'])->all();
        //优化可以这样写   My_members_log::className() 代替 frontend\models\My_members_log
        $log=$content->hasMany(My_members_log::className(),['log_uid'=>'uid'])->asArray()->all();    
        print_r($log);




class My_members extends ActiveRecord{
    //获取日志信息
    public function getLog(){
        $log=$this->hasMany(My_members_log::className(),['log_uid'=>'uid'])->asArray();
        return $log;
    }
}

public function actionShows(){
        //关联查询
        $content=My_members::find()->where(['username'=>'993013863@qq.com'])->one();
        //调用关联方法      第一个是表模型        第二个是数组(id相反)
        //$log=$content->hasMany('frontend\models\My_members_log',['log_uid'=>'uid'])->asArray()->all();
        //$log=$content->hasMany(My_members_log::className(),['log_uid'=>'uid'])->asArray()->all();
        //$log=$content->getLog();
        //删除缓存
         unset($content->log);
        $log=$content->log;
        print_r($log);
    }

hasOne()表示多查一 (自动在后面增加one()方法)  hasMany()表示一查多 (自动在后面增加All()方法)


 //关联查询  个人
    ActiveRecord封装好方法

        public function getName(){
            return  $this->hasOne(My_members::className(),['uid'=>'log_uid'])->asArray();
        }
    controller里面调用

        $content=My_members_log::find()->where(['log_id'=>6])->one();
        //避免缓存
         unset($content->name);
        $name=$content->name;

//分页显示
//引入模型
use app\models\Country;
//引入分页
use yii\data\Pagination;

 public function actionIndex()
    {
        //生成模型的查询
        $query = Country::find();
        $pagination = new Pagination([
            //每页记录条数
            'defaultPageSize' => 5,
            //全部的计数
            'totalCount' => $query->count(),
        ]);
        $countries = $query->orderBy('name')
            ->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();
        return $this->render('index', [
            'countries' => $countries,
            'pagination' => $pagination,
        ]);
    }

视图层
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
    <h1>Countries</h1>
    <ul>
        <?php foreach ($countries as $country): ?>
            <li>
                <?= Html::encode("{$country->name} ({$country->code})") ?>:
                <?= $country->population ?>
            </li>
        <?php endforeach; ?>
    </ul>

<?= LinkPager::widget(['pagination' => $pagination]) ?>

安全

当创建生成HTML页面的视图时,在显示之前将用户输入数据进行转码和过滤非常重要, 否则,你的应用可能会被跨站脚本 攻击。

要显示纯文本,先调用 yii\helpers\Html::encode() 进行转码,例如如下代码将用户名在显示前先转码:
<?php
use yii\helpers\Html;
?>

<div class="username">
    <?= Html::encode($user->name) ?>
</div>


要显示HTML内容,先调用 yii\helpers\HtmlPurifier 过滤内容,例如如下代码将提交内容在显示前先过滤:
<?php
use yii\helpers\HtmlPurifier;
?>

<div class="post">
    <?= HtmlPurifier::process($post->text) ?>
</div>

技巧:HTMLPurifier在保证输出数据安全上做的不错,但性能不佳,如果你的应用需要高性能可考虑 缓存 过滤后的结果。





 1.简单查询:
    
[[one()]]: 根据查询结果返回查询的第一条记录。
 
[[all()]]: 根据查询结果返回所有记录。
 
[[count()]]: 返回记录的数量。
 
[[sum()]]: 返回指定列的总数。
 
[[average()]]: 返回指定列的平均值。
 
[[min()]]: 返回指定列的最小值。
 
[[max()]]: 返回指定列的最大值。
 
[[scalar()]]: 返回查询结果的第一行中的第一列的值。
 
[[column()]]: 返回查询结果中的第一列的值。
 
[[exists()]]: 返回一个值,该值指示查询结果是否有数据。
 
[[where()]]: 添加查询条件
 
[[with()]]: 该查询应执行的关系列表。
 
[[indexBy()]]: 根据索引的列的名称查询结果。
 
[[asArray()]]: 以数组的形式返回每条记录。

 应用实例:

Customer::find()->one();    此方法返回一条数据;

Customer::find()->all();    此方法返回所有数据;

Customer::find()->count();    此方法返回记录的数量;

Customer::find()->average();    此方法返回指定列的平均值;

Customer::find()->min();    此方法返回指定列的最小值 ;

Customer::find()->max();    此方法返回指定列的最大值 ;

Customer::find()->scalar();    此方法返回值的第一行第一列的查询结果;

Customer::find()->column();    此方法返回查询结果中的第一列的值;

Customer::find()->exists();    此方法返回一个值指示是否包含查询结果的数据行;

Customer::find()->asArray()->one();    以数组形式返回一条数据;

Customer::find()->asArray()->all();    以数组形式返回所有数据;

Customer::find()->where($condition)->asArray()->one();    根据条件以数组形式返回一条数据;

Customer::find()->where($condition)->asArray()->all();    根据条件以数组形式返回所有数据;

Customer::find()->where($condition)->asArray()->orderBy('id DESC')->all();    根据条件以数组形式返回所有数据,并根据ID倒序;

2.关联查询:
    
[[ActiveRecord::hasOne()]]:返回对应关系的单条记录
[[ActiveRecord::hasMany()]]:返回对应关系的多条记录

应用实例:

//客户表Model:CustomerModel
//订单表Model:OrdersModel
//国家表Model:CountrysModel
//首先要建立表与表之间的关系
//在CustomerModel中添加与订单的关系
       
Class CustomerModel extends yiidbActiveRecord
{
    ...
     
    public function getOrders()
    {
        //客户和订单是一对多的关系所以用hasMany
        //此处OrdersModel在CustomerModel顶部别忘了加对应的命名空间
        //id对应的是OrdersModel的id字段,order_id对应CustomerModel的order_id字段
        return $this->hasMany(OrdersModel::className(), ['id'=>'order_id']);
    }
      
    public function getCountry()
    {
        //客户和国家是一对一的关系所以用hasOne
        return $this->hasOne(CountrysModel::className(), ['id'=>'Country_id']);
    }
    ....
}
       
// 查询客户与他们的订单和国家
CustomerModel::find()->with('orders', 'country')->all();
 
// 查询客户与他们的订单和订单的发货地址
CustomerModel::find()->with('orders.address')->all();
 
// 查询客户与他们的国家和状态为1的订单
CustomerModel::find()->with([
    'orders' => function ($query) {
        $query->andWhere('status = 1');
        },
        'country',
])->all();

注:with中的orders对应getOrders

常见问题:

1.在查询时加了->select();如下,要加上order_id,即关联的字段(比如:order_id)比如要在select中,否则会报错:undefined index order_id

    
// 查询客户与他们的订单和国家
CustomerModel::find()->select('order_id')->with('orders', 'country')->all();
    
 

findOne()和findAll():
    
// 查询key值为10的客户
$customer = Customer::findOne(10);
$customer = Customer::find()->where(['id' => 10])->one();

    
// 查询年龄为30,状态值为1的客户
$customer = Customer::findOne(['age' => 30, 'status' => 1]);
$customer = Customer::find()->where(['age' => 30, 'status' => 1])->one();

    
// 查询key值为10的所有客户
$customers = Customer::findAll(10);
$customers = Customer::find()->where(['id' => 10])->all();

    
// 查询key值为10,11,12的客户
$customers = Customer::findAll([10, 11, 12]);
$customers = Customer::find()->where(['id' => [10, 11, 12]])->all();

    
// 查询年龄为30,状态值为1的所有客户
$customers = Customer::findAll(['age' => 30, 'status' => 1]);
$customers = Customer::find()->where(['age' => 30, 'status' => 1])->all();

where()条件:

$customers = Customer::find()->where($cond)->all();

$cond写法举例:
    
// SQL: (type = 1) AND (status = 2).
$cond = ['type' => 1, 'status' => 2]
 
// SQL:(id IN (1, 2, 3)) AND (status = 2)
$cond = ['id' => [1, 2, 3], 'status' => 2]
 
//SQL:status IS NULL
$cond = ['status' => null]

[[and]]:将不同的条件组合在一起,用法举例:
    
//SQL:`id=1 AND id=2`
$cond = ['and', 'id=1', 'id=2']
 
//SQL:`type=1 AND (id=1 OR id=2)`
$cond = ['and', 'type=1', ['or', 'id=1', 'id=2']]

[[or]]:
    
//SQL:`(type IN (7, 8, 9) OR (id IN (1, 2, 3)))`
$cond = ['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]]

[[not]]:

    
//SQL:`NOT (attribute IS NULL)`
$cond = ['not', ['attribute' => null]]

[[between]]: not between 用法相同

    
//SQL:`id BETWEEN 1 AND 10`
$cond = ['between', 'id', 1, 10]

[[in]]: not in 用法类似
    
//SQL:`id IN (1, 2, 3)`
$cond = ['in', 'id', [1, 2, 3]]
 
//IN条件也适用于多字段
$cond = ['in', ['id', 'name'], [['id' => 1, 'name' => 'foo'], ['id' => 2, 'name' => 'bar']]]
 
//也适用于内嵌sql语句
$cond = ['in', 'user_id', (new Query())->select('id')->from('users')->where(['active' => 1])]

[[like]]:
    
//SQL:`name LIKE '%tester%'`
$cond = ['like', 'name', 'tester']
 
//SQL:`name LIKE '%test%' AND name LIKE '%sample%'`
$cond = ['like', 'name', ['test', 'sample']]
 
//SQL:`name LIKE '%tester'`
$cond = ['like', 'name', '%tester', false]

[[exists]]: not exists用法类似
    
//SQL:EXISTS (SELECT "id" FROM "users" WHERE "active"=1)
$cond = ['exists', (new Query())->select('id')->from('users')->where(['active' => 1])]

此外,您可以指定任意运算符如下
    
//SQL:`id >= 10`
$cond = ['>=', 'id', 10]
 
//SQL:`id != 10`
$cond = ['!=', 'id', 10]

常用查询:    
// WHERE admin_id >= 10 LIMIT 0,10
 User::find()->select('*')->where(['>=', 'admin_id', 10])->offset(0)->limit(10)->all()

    
// SELECT `id`, (SELECT COUNT(*) FROM `user`) AS `count` FROM `post`   
 $subQuery = (new Query())->select('COUNT(*)')->from('user');    
 $query = (new Query())->select(['id', 'count' => $subQuery])->from('post');

    
  // SELECT DISTINCT `user_id` ...
 User::find()->select('user_id')->distinct();

更新:

    
//update();
//runValidation boolen 是否通过validate()校验字段 默认为true
//attributeNames array 需要更新的字段
$model->update($runValidation , $attributeNames);  
 
//updateAll();
//update customer set status = 1 where status = 2
Customer::updateAll(['status' => 1], 'status = 2');
 
//update customer set status = 1 where status = 2 and uid = 1;
Customer::updateAll(['status' => 1], ['status'=> '2','uid'=>'1']);

删除:

    
$model = Customer::findOne($id);
$model->delete();
 
$model->deleteAll(['id'=>1]);


批量插入:

    
Yii::$app->db->createCommand()->batchInsert(UserModel::tableName(), ['user_id','username'], [
    ['1','test1'],
    ['2','test2'],
    ['3','test3'],   
])->execute();

查看执行sql

    
//UserModel
$query = UserModel::find()->where(['status'=>1]);
echo $query->createCommand()->getRawSql();


    

       









 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值