YII2使用的一些总结

Mode块赋值

yii的model提供了块赋值,如下

$values = [ 
   'name' => 'James',
   'email' => '[email protected]',
];
$customer = new Customer();
$customer->attributes = $values;
$customer->save();

使用块赋值可一次性给多个属性赋值,但使用中有赋值不上的情况发生。检查后发现,块赋值的属性,必须通过model中的rules验证,或者设为safe。否则赋值都为0

$model->load()数据填充

$model->load(yii::$app->request->post());

可以快速把表单提交的数据复制给模型。但他同块赋值相同。
必须在rules方法中通过验证,否则无法赋值

输出sql语句

$query = self::findOne(1);
echo $query->createCommand()->getRawSql();

复杂的sql语句拼接

在model中使用复杂的sql时,Yii会出现解析错误的情况。例如

$query = User::find()->all();
$query->select("*,FROM_UNIXTIME('create_time','%Y-%m-%d') as date");

以上生成的sql语句中,yii会把````FROM_UNIXTIME(‘create_time’,’%Y-%m-%d’)` ```当做是一个字段,以至报错。

此时我们在头部引入 use yii\db\Expression;使用方法如下

use yii\db\Expression;
$query = User::find()->all();
$query->select(new Expression("*,FROM_UNIXTIME('create_time','%Y-%m-%d') as date"));

多条件删除和修改

常见的删除如:User::deleteAll([‘id’=>1]);

当需要多个条件时,需要如下形式

//多条件删除

User::deleteAll(['and',['uid'=>1,'status'=>1],['>','id',100]]);
//多条件更新,跟删除类似,只是第一个数组为需要跟新的数据
User::updateAll(
    ['name'=>'wang','age'=>20],
    [
        'and',
        ['status'=>1,'sex'=>1],
        ['>','id',100]
    ]
);

YII框架自带的JSON方法

使用AR获取的数据列表,不能直接使用json_encode进行序列化,会丢失数据。使用yii\helpers\Json::encode($data);进行序列化,可以保证数据的完整性,要注意命名空间的大小写。mmp,这个问题耽误老子俩小时

使用自定义的model

即不指定表名,主要用于验证用户提交的数据,自己新建的继承AR的model,需要注意:

①不能使用$model->attributes = $param赋值,只能使用$model->load($param,'')

②不能使用场景,会提示表不存在

获取数据提供器数据

使用数据提供器获取的数据对象,无法直接遍历。

需要 d a t a = data = data=provider->getmoldes();获得一个对象数组,然后在进行遍历操作

yii框架接口分页

Yii框架的数据提供及ActiveDataProvider 配合页面小部件可以实现内容分页。当我们使用yii写前台接口时,也可以使用数据提供器来实现数据的分页,步骤如下


//每页数据量和页数
//可以在url中传入,名称可在vendor\yiisoft\yii2\data\Pagination.php 中自行定义
$page = $_GET('page');
$pagesize = $_GET('pagesize');
//设置数据查询的query
$query = User::find();
//获取数据总数
$count = $query->count();
//声明分页对象,并设置分页的相关参数
$pagination = new Pagination(['totalCount' => $count,'pagesize'=>$pagesize,'page'=>$page]);
//获取分页查询数据
$res = $query->offset($pagination->offset)
            ->limit($pagination->pagesize)
            ->all();

//在header中返回分页的相关数据
Yii::$app->getResponse()->getHeaders()
            ->set('X-Pagination-Total-Count', $pagination->totalCount)
            ->set('X-Pagination-Page-Count', $pagination->getPageCount())
            ->set('X-Pagination-Current-Page', $pagination->getPage() + 1);

数据验证

可查看官方文档:核心验证器
这里是提示下,文件验证的时候,设置
[‘primaryImage’, ‘file’, ‘extensions’ =>[‘png’,‘jpg’,‘gif’],‘maxSize’=>102410241024],‘checkExtensionByMimeType’=>false]
checkExtensionByMimeType默认为true,需要设置为false。
是否通过文件的 MIME 类型来判断其文件扩展。 若由 MIME 判定的文件扩展与给定文件的扩展不一样,则文件会被认为无效

猜你喜欢

转载自blog.csdn.net/u012830303/article/details/82255813