单表查询
配置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);
}