Yii-데이터 제공 업체

Yii는 페이지 매김 및 정렬을 캡슐화하는 데이터 공급자 클래스 집합을 제공합니다. 데이터 공급자는 yii \ data \ DataProviderInterface를 구현합니다. 정렬되고 페이지가 매겨진 데이터 검색을 지원합니다. 데이터 공급자는 일반적으로 데이터 위젯과 함께 작동합니다.

Yii는-

  • ActiveDataProvider − 용도 yii\db\ActiveQuery 또는 yii\db\Query 데이터베이스에서 데이터를 쿼리합니다.

  • SqlDataProvider − SQL을 실행하고 데이터를 배열로 반환합니다.

  • ArrayDataProvider − 큰 배열을 취하고 그 조각을 반환합니다.

데이터 제공자의 정렬 및 페이지 매김 동작을 구성하여 정의합니다. paginationsort속성. 다음과 같은 데이터 위젯yii\grid\GridView,라는 속성이 있습니다. dataProvider, 데이터 공급자 인스턴스를 가져와 화면에 데이터를 표시합니다.

DB 준비

Step 1− 새 데이터베이스를 생성합니다. 데이터베이스는 다음 두 가지 방법으로 준비 할 수 있습니다.

  • 터미널에서 mysql -u root –p를 실행 합니다.

  • 다음을 통해 새 데이터베이스 만들기 CREATE DATABASE helloworld 캐릭터 세트 utf8 COLLATE utf8_general_ci;

Step 2 −에서 데이터베이스 연결을 구성합니다. config/db.php파일. 다음 구성은 현재 사용중인 시스템에 대한 것입니다.

<?php
   return [
      'class' => 'yii\db\Connection',
      'dsn' => 'mysql:host = localhost;dbname = helloworld',
      'username' => 'vladimir',
      'password' => '12345',
      'charset' => 'utf8',
   ];
?>

Step 3 − 루트 폴더 내부 run ./yii migrate/create test_table. 이 명령은 DB 관리를위한 데이터베이스 마이그레이션을 생성합니다. 마이그레이션 파일은migrations 프로젝트 루트의 폴더.

Step 4 − 마이그레이션 파일 (m160106_163154_test_table.php 이 경우) 이런 식으로.

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160106_163154_test_table extends Migration {
      public function safeUp() {
         $this->createTable("user", [ "id" => Schema::TYPE_PK, "name" => Schema::TYPE_STRING, "email" => Schema::TYPE_STRING, ]); $this->batchInsert("user", ["name", "email"], [
            ["User1", "[email protected]"],
            ["User2", "[email protected]"],
            ["User3", "[email protected]"],
            ["User4", "[email protected]"],
            ["User5", "[email protected]"],
            ["User6", "[email protected]"],
            ["User7", "[email protected]"],
            ["User8", "[email protected]"],
            ["User9", "[email protected]"],
            ["User10", "[email protected]"],
            ["User11", "[email protected]"],
         ]);
      }
      public function safeDown() {
         $this->dropTable('user');
      }
   }
?>

위의 마이그레이션은 user다음 필드가있는 테이블 : ID, 이름 및 이메일. 또한 몇 명의 데모 사용자를 추가합니다.

Step 5 − 프로젝트 루트 내부 run ./yii migrate 마이그레이션을 데이터베이스에 적용합니다.

Step 6 − 이제 우리는 우리를위한 모델을 만들어야합니다. user표. 간단하게하기 위해 우리는Gii코드 생성 도구. 이것을 열어url: http://localhost:8080/index.php?r=gii. 그런 다음 "모델 생성기"헤더 아래의 "시작"버튼을 클릭합니다. 테이블 이름 ( "user")과 모델 클래스 ( "MyUser")를 입력하고 "Preview"버튼을 클릭 한 다음 마지막으로 "Generate"버튼을 클릭합니다.

MyUser 모델이 models 디렉토리에 나타나야합니다.

활성 데이터 공급자

Step 1 −라는 함수 생성 actionDataProvider 내부 SiteController.

public function actionDataProvider(){
   $query = MyUser::find();
   $provider = new ActiveDataProvider([ 'query' => $query,
      'pagination' => [
         'pageSize' => 2,
      ],
   ]);
   // returns an array of users objects
   $users = $provider->getModels();
   var_dump($users);
}

위의 코드에서 우리는 ActiveDataProvider첫 페이지에서 사용자를 분류하고 표시합니다. 그만큼yii\data\ActiveDataProvider 클래스는 DB 응용 프로그램 구성 요소를 DB 연결로 사용합니다.

Step 2 − 로컬 호스트 주소를 입력하는 경우 http://localhost:8080/index.php?r=site/dataprovider, 다음 출력이 표시됩니다.

SQL 데이터 공급자

그만큼 yii\data\SqlDataProvider 클래스는 원시 SQL 문과 함께 작동합니다.

Step 1 − 수정 actionDataProvider 이 방법으로.

public function actionDataProvider() {
   $count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM user')->queryScalar(); $provider = new SqlDataProvider([
      'sql' => 'SELECT * FROM user',
      'totalCount' => $count, 'pagination' => [ 'pageSize' => 5, ], 'sort' => [ 'attributes' => [ 'id', 'name', 'email', ], ], ]); // returns an array of data rows $users = $provider->getModels(); var_dump($users);
}

Step 2 − 유형 http://localhost:8080/index.php?r=site/data-provider 웹 브라우저의 주소 표시 줄에 다음과 같은 출력이 표시됩니다.

어레이 데이터 공급자

그만큼 yii\data\ArrayDataProvider클래스는 큰 배열 작업에 가장 적합합니다. 이 배열의 요소는 DAO 또는 Active Record 인스턴스의 쿼리 결과 일 수 있습니다.

Step 1 − 수정 actionDataProvider 이 방법으로.

public function actionDataProvider() {
   $data = MyUser::find()->asArray()->all(); $provider = new ArrayDataProvider([
      'allModels' => $data, 'pagination' => [ 'pageSize' => 3, ], 'sort' => [ 'attributes' => ['id', 'name'], ], ]); // get the rows in the currently requested page $users = $provider->getModels(); var_dump($users);
}

Step 2 − 주소로 가면 http://localhost:8080/index.php?r=site/data-provider 웹 브라우저를 통해 다음 출력을 볼 수 있습니다.

SQL 데이터 공급자 및 활성 데이터 공급자와 달리 배열 데이터 공급자는 모든 데이터를 메모리에로드하므로 효율성이 떨어집니다.