Yii框架記錄
Yii框架記錄
Yii 結構使用yii開發一段時間,發現自身知其形不知其意,重溫了下yii,階段性總結如下:
模型
模型是MVC模式中的一部分,是表現業務數據規則和邏輯的對象。
可通過集成yii/base/Model或它的子類定義模型類,基類支持特性:
- 屬性:表現業務數據,可以像普通類屬性或數組一樣被訪問;
- 屬性標簽:指定屬性顯示出來的標簽;
- 塊賦值:支持一次給許多屬性賦值;
- 驗證規則:確保輸入數據符合所申明的驗證規則;
- 數據導出:允許模型數據導出為自定義的數組;
驗證規則 調用yii/base/Model::validate()來驗證接收的數據;
表單
yii/widgets/ActiveForm來創建表單。
<?php $form = ActiveForm::begin([‘id‘ => ‘user-form‘,action‘ => [‘test/getpost‘],‘method‘=>‘post‘,]); ?>
<?echo $form->field($model, ‘username‘)->textInput([‘maxlength‘ => 20]) ?>
<?echo $form->field($model, ‘password‘)->passwordInput([‘ maxlength‘ => 20]) ?>
<?echo Html::submitButton(‘提交‘, [‘class‘=>‘btn btn-primary‘,‘name‘ =>‘submit-button‘]) ?>
<?php ActiveForm::end(); ?>
$model實現數據賦值 load方法
$model->load(yii::$app->request->post());
表單中存在一些與模型對象無關系、額外的HTML標簽,可以使用純html或者使用yii/helper/Html幫助類中的方法。
附件 0.00KB
控制器 Controllers
refresh() 刷新頁面。
render()
public string render( $view,$params=[] )
$params是傳給視圖的數據,通常傳遞模型對象,可以傳遞多個對象。
小部件 DetailView
ActiveRecord
通過繼承yii\db\ActiveRecord基類來聲明一個AR類,並實現tableName方法,返回與之相關聯的數據表的名稱
class User extends \yii\db\ActiveRecord{
public static function tableName(){
return ‘user‘;
}
}
查詢數據
返回AR對象
- yii\db\ActiveRecord::find()
$model = User::findone(1);
$model = User::findAll([‘username‘=>‘張三‘]);
$model = User::find()->where([‘username‘=>‘張三‘])->all();
- yii\db\ActiceRecord::findBySql()
$sql = ‘select * from user where username=\‘張三\‘‘;
$model = User::findSql($sql)->all();
操作數據CURD
- yii\db\ActiveRecord::insert()
- yii\db\ActiveRecord::update()
- yii\db\ActiveRecord::delete()
- yii\db\ActiveRecord::save()
關聯查詢 使用Relations
ActiveRecord類通過hasOne或hasMany來建立兩個表的關聯關系;
hasOne 多對一,一對一;hasMany 一對多;
class User extends ActiveRecord{
...
public function getAddress(){
return $this->hasMany(Address:className(),[‘uid‘=>‘id‘]);
}
...
}
小部件
數組助手類 Array Helper
查詢構建器 Query Builder
建立在DAO基礎之上,創建程序化的、DBMS無關的SQL語句,並且創建的SQL語句,比原生的SQL更易讀更安全。
查詢構建器事例:
$rows = (new \yii\db\Query())
->select([‘id‘,‘name‘])
->form(‘user‘)
->where([‘name‘=>‘張三‘])
->orderBy(‘id‘)
->limit(10)
->indexBy(‘id‘)
->all();
select()方法
使用字符串或一個數組來指定需要查詢的字段
$query->select(‘id,name‘)
$query->select([‘id‘,‘name‘])
$query->select(‘id as user_id,name‘)
$query->select([‘CONTACT(first_name,‘ ‘,last_name) AS full_name‘,‘name‘])
子查詢
#SELECT ‘id‘,(SELECT COUNT(*) FROM `user`) as `count` from `user`
$subQuery = (new Query())->select(‘count(*)‘)->from(‘post‘);
$query = (new Query())->select([‘id‘,‘count‘=>$subQuery])->form(‘post‘);
可以使用yii\db\Query::addSelect()方法來選取附加字段。
$query->select([‘id‘,‘username‘])->addSelect([‘email‘]);
where()方法
- 字符串格式 ‘status=1‘
- 鍵值對數組 [‘status‘=>1,‘type‘=>2]
- 操作符格式 [‘like‘,‘name‘,‘test‘]
操作符 | where參數 | SQL語句 |
---|---|---|
and | [‘and‘,‘id=1‘,‘id=2‘] | id=1 AND id=2 |
or | [‘or‘,‘id=1‘,‘id=2‘] | id=1 OR id=2 |
in | [‘id‘,‘in‘,[1,2,3]] | IN (1,2,3) |
between | [‘between‘,‘id‘,1,10] | id BETWEEN 1 AND 10 |
like | [‘like‘,‘name‘,[‘test‘,‘sample‘]] | name like ‘%test%‘ AND name like ‘%sample%‘ |
比較 | [‘>=‘,‘id‘,‘10‘] | id>=10 |
orderBy()方法
$query->orderBy([
‘id‘ => SORT_ASC, //升序
‘name‘ => SORT_DESC //降序
])
也可用字符串來聲明。
$query->orderBy("id ASC,name DESC");
limit() 和 offset() 方法
用來指定SQL語句當中的limit和offset子句。
$query->limit(10)->offset(20);
groupBy() 和 having() 方法
$query->groupBy([‘id‘,‘status‘]);
可通過addOrderBY()來為group by子句增加額外的字段。
$query->groupBy([‘id‘,‘status‘])
->addGroupBy(‘age‘)
having 類似
$query->having([‘status‘=>1])
可調用andHaving或者orHaving()方法來為HAVING增加額外的條件。
$query->having([‘status‘=>1])
->andHaving([‘>‘,‘age‘,‘30‘])
join() 和 union() 方法
$query->join(‘LEFT JOIN‘,‘post‘,‘post.user_id=user.id‘);
union()用來指定SQL語句中的UNION子句
$query1 = (new \yii\db\Query())
->select("id,category_id as type,name")
->form(‘post‘)
->limit(10);
$query2 = (new \yii\db\Query())
->select(‘id,type,name‘)
->form(‘post‘)
->limit(10);
$query1->union($query2);
yii\db\Query提供一整套用於不同查詢的方法 :
method | description |
---|---|
all() | 返回一個由行組成的數組,每一行由名稱和值組成的關聯數組。 |
one() | 返回結果集的第一行 |
column() | 返回結果集的第一列 |
scalar() | 返回結果集的第一行第一列的標量值 |
exists() | 返回一個表示該查詢是否包含結果集的值 |
count() | 返回COUNT查詢的結果 |
sum() | 返回指定列的和值 |
average() | 返回指定列的平均值 |
max() | 返回指定列的最大值 |
min() | 返回指定列的最小值 |
indexBy() 索引查詢結果
當調用all()方法時,希望使用一個特定的字段或者表達式的值來作為索引結果集數組。可在調用yii\db\Query::all()之前調用yii\db\Query::indexBy()方法。
Yii框架記錄