Yii - डेटा प्रदाता

Yii डेटा प्रदाता कक्षाओं का एक सेट प्रदान करता है जो पृष्ठांकन और सॉर्टिंग को एन्क्रिप्ट करता है। एक डेटा प्रदाता yii \ data \ DataProviderInterface को लागू करता है। यह सॉर्ट किए गए और पृष्ठांकित डेटा को पुनः प्राप्त करने का समर्थन करता है। डेटा प्रदाता आमतौर पर डेटा विजेट के साथ काम करते हैं।

Yii में शामिल हैं -

  • ActiveDataProvider - उपयोग करता है yii\db\ActiveQuery या yii\db\Query डेटाबेस से डेटा क्वेरी करने के लिए।

  • SqlDataProvider - SQL निष्पादित करता है और सरणियों के रूप में डेटा लौटाता है।

  • ArrayDataProvider - एक बड़ा सरणी लेता है और इसका एक टुकड़ा लौटाता है।

आप किसी डेटा-प्रदाता के सॉर्टिंग और पेजिंग व्यवहार को उसके द्वारा कॉन्फ़िगर करके परिभाषित करते हैं pagination तथा sortगुण। डेटा विजेट, जैसे किyii\grid\GridView, एक संपत्ति कहा जाता है dataProvider, जो डेटा प्रदाता का उदाहरण लेता है और स्क्रीन पर डेटा प्रदर्शित करता है।

डीबी की तैयारी

Step 1- एक नया डेटाबेस बनाएँ। डेटाबेस को निम्नलिखित दो तरीकों से तैयार किया जा सकता है।

  • टर्मिनल में mysql -u root -p चलाएं ।

  • के माध्यम से एक नया डेटाबेस बनाएँ CREATE DATABASE helloworld CHARACTER SET 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इन फ़ील्ड्स के साथ तालिका: आईडी, नाम और ईमेल। यह कुछ डेमो उपयोगकर्ताओं को भी जोड़ता है।

Step 5 - प्रोजेक्ट रूट के अंदर run ./yii migrate डेटाबेस में माइग्रेशन लागू करने के लिए।

Step 6 - अब, हमें अपने लिए एक मॉडल बनाने की आवश्यकता है userतालिका। सादगी के लिए, हम उपयोग करने जा रहे हैंGiiकोड जनरेशन टूल। इसे खोलोurl: http://localhost:8080/index.php?r=gii। फिर, "मॉडल जनरेटर" हेडर के तहत "प्रारंभ" बटन पर क्लिक करें। तालिका नाम ("उपयोगकर्ता") और मॉडल वर्ग ("MyUser") भरें, "पूर्वावलोकन" बटन पर क्लिक करें और अंत में, "जनरेट" बटन पर क्लिक करें।

MyUser मॉडल को मॉडल निर्देशिका में दिखाई देना चाहिए।

सक्रिय डेटा प्रदाता

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 या सक्रिय रिकॉर्ड उदाहरणों के क्वेरी परिणाम हो सकते हैं।

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 डेटा प्रदाता और सक्रिय डेटा प्रदाता के विपरीत, Array डेटा प्रदाता मेमोरी में सभी डेटा लोड करता है, इसलिए यह कम कुशल है।