Yii-데이터 제공 업체
Yii는 페이지 매김 및 정렬을 캡슐화하는 데이터 공급자 클래스 집합을 제공합니다. 데이터 공급자는 yii \ data \ DataProviderInterface를 구현합니다. 정렬되고 페이지가 매겨진 데이터 검색을 지원합니다. 데이터 공급자는 일반적으로 데이터 위젯과 함께 작동합니다.
Yii는-
ActiveDataProvider − 용도 yii\db\ActiveQuery 또는 yii\db\Query 데이터베이스에서 데이터를 쿼리합니다.
SqlDataProvider − SQL을 실행하고 데이터를 배열로 반환합니다.
ArrayDataProvider − 큰 배열을 취하고 그 조각을 반환합니다.
데이터 제공자의 정렬 및 페이지 매김 동작을 구성하여 정의합니다. pagination 과 sort속성. 다음과 같은 데이터 위젯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 데이터 공급자 및 활성 데이터 공급자와 달리 배열 데이터 공급자는 모든 데이터를 메모리에로드하므로 효율성이 떨어집니다.