Yii框架记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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框架记录的主要内容,如果未能解决你的问题,请参考以下文章

Yii1.1.16学习记录

关于yii2框架活动记录activeRecord添加默认字段的问题

18.Yii2.0框架模型修改记录 和 修改点击量

Yii2如何添加sql日志记录的配置信息

YII 框架查询

Yii2的相关学习记录,安装Yii2