YII2の使用に関する要約

モードブロックの割り当て

yiiモデルは、次のようにブロック割り当てを提供します

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

ブロック割り当てを使用して、一度に複数の属性に値を割り当てますが、使用中に割り当てが失敗する場合があります。チェックした後、ブロックによって割り当てられた属性は、モデル内のルールによって検証されるか、安全に設定される必要があることがわかりました。それ以外の場合、割り当ては0です。

$ model-> load()データ入力

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

フォームから送信されたデータをモデルにすばやくコピーできます。ただし、ブロック割り当てと同じです。
ルールメソッドで検証する必要があります。検証しないと、割り当てることができません。

SQLステートメントを出力します

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

複雑なSQLステートメントのスプライシング

モデルで複雑な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);を使用します。名前空間の大文字と小文字に注意してください。うーん、この質問は私を2時間遅らせました

カスタムモデルを使用する

つまり、テーブル名は指定されておらず、主にユーザーが送信したデータを確認するために使用されます。ARを自分で継承する新しいモデルの場合、次の点に注意する必要があります。

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

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

データプロバイダーデータを取得する

データプロバイダーを使用して取得したデータオブジェクトを直接トラバースすることはできません。

必要なデータ=データ=d a t a= 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' => 1024 1024 1024]、'checkExtensionByMimeType' => false ]
checkExtensionByMimeTypeはデフォルトでtrueであり、falseに設定する必要があります。
ファイルのMIMEタイプでファイル拡張子を判断するかどうか。MIMEによって決定されたファイル拡張子が特定のファイルの拡張子と同じでない場合、ファイルは無効と見なされます

おすすめ

転載: blog.csdn.net/u012830303/article/details/82255813