yii2—数据模型

单表查询

配置config\db.php

return [
 
    'class' => 'yii\db\Connection',
     
    'dsn' => 'mysql:host=localhost;dbname=test',
     
    'username' => 'root',
     
    'password' => '12345678',
     
    'charset' => 'utf8',
     
]

创建数据模型

models\users.php

<?php
 
namespace app\models;
 
use yii\db\ActiveRecord;
 
class Users extends ActiveRecord{ }
 
?>

控制器操作数据模型

<?php
 
namespace app\controllers;
 
use yii\web\Controller;
 
use app\models\Users;
 
class HelloController extends Controller
 
{
 
     public function actionIndex(){
      
         $sql = 'select * from users where id = 1';
      
         $users = Users::findBySql($sql)->all();    // 原生查询
         
         print_r($users);
         
     }
     
}

sql注入

public function actionIndex(){
      
         $id = '1 or 1=1';
         
         // $sql = 'select * from users where id ='.$id;  // 这样会被sql注入
          
         // $users = Users::findBySql($sql)->all();       // 原生查询
          
         $sql = 'select * from users where id = :id';     // 使用占位符
      
         $users = Users::findBySql($sql,array(':id'=>$id))->all();   // 不会被sql注入
         
         print_r($users);
         
     }

单表删除

$user = Users::find()->where(['id'=>1])->all();
 
$user[0]->delete();
 
User::deleteAll('id>:id',array(':id'=>1));

新增

数据模型(数据验证)

public function rules(){
 
        return [
         
            ['username','string','length'=>[1,5]],
             
        ];
         
    }

控制器

$user = new Users;
 
$user->username = '1234567890';
 
$user->validate();
 
if($user->hasErrors()){
 
   return $user->errors;
     
}else{
 
     $user->save();
      
}

修改

$user = User::find()->where(['id',1])->one();
 
$user->username='zhangsan';
 
$user->save();

关联查询

<?php
 
namespace app\controllers;
 
use yii\web\Controller;
 
use app\models\Users;
 
use app\models\Article;
 
class HelloController extends Controller
 
{    
    public function actionIndex(){
     
        $user = Users::find()->where(['id'=>1])->one();
         
        $article = $user->hasMany('app\models\Article',['uid'=>'id'])->asArray()->all();
         
        print_r($article);
         
    }
     
}

降低耦合性

User.php

public function getArticle(){
 
        $article = $this->hasMany(Article::className(),['uid'=>'id'])->asArray()->all();
         
        return $article;
         
}

控制器

public function actionIndex(){
 
    $user = Users::find()->where(['id'=>1])->one();
     
    $article = $user->getArticle();
     
    print_r($article);
}

或者使用属性

public function actionIndex(){
 
    $user = Users::find()->where(['id'=>1])->one();
 
    $article = $user->article;
         
    print_r($article);
 
}

User.php

public function getArticle(){
 
        $article = $this->hasMany(Article::className(),['uid'=>'id'])->asArray();
         
        return $article;
         
}

原理:$user->article 会调用__get()方法 找到 getArticle()

清除查询缓存

public function actionIndex(){
 
    $user = Users::find()->where(['id'=>1])->one();
 
   $article = $user->article;
    
   unset($user->article);   // 清除查询缓存
    
   $article2 = $user->article;
    
   print_r($article2);
     
}

关联查询的多次查询

$user = Users::find()->with('article')->all();
 
foreach($user as $user){
 
    $article = $user->article;print_r($article);
 
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值