1. 程式人生 > >Yii框架記錄

Yii框架記錄

doc sna 一段時間 query tar chm some otto 小部件

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提供一整套用於不同查詢的方法 :

methoddescription
all() 返回一個由行組成的數組,每一行由名稱和值組成的關聯數組。
one() 返回結果集的第一行
column() 返回結果集的第一列
scalar() 返回結果集的第一行第一列的標量值
exists() 返回一個表示該查詢是否包含結果集的值
count() 返回COUNT查詢的結果
sum() 返回指定列的和值
average() 返回指定列的平均值
max() 返回指定列的最大值
min() 返回指定列的最小值

indexBy() 索引查詢結果

當調用all()方法時,希望使用一個特定的字段或者表達式的值來作為索引結果集數組。可在調用yii\db\Query::all()之前調用yii\db\Query::indexBy()方法。

技術分享

Yii框架記錄