
วิธีการดึงข้อมูลจาก "ตาราง" ในฐานข้อมูลมาแสดงเป็นตาราง "GridView" ได้นั้นเราต้องทำการแปลง Data ของเรา ให้อยู่ในรูปของข้อมูลแบบ dataProvider ซะก่อน ซึ่งคำสั่งหลักมี 2 คำสั่ง คือ CSqlDataProvider และ CActiveDataProvider ด้วยกัน
DAO Class เวลาต้องการใช้งาน ในไฟล์ php.ini จะต้องเปิดใช้งาน Modules php_mysql, php_pdo, php_pdo_mysql ไว้ด้วย
/** Comment **/ /** เชื่อมต่อฐานข้อมูลในไฟล์ config/main.php **/ $connection = Yii::app()->db; /** หรือ ระบุการเชื่อมต่อโดยตรง **/ $connection = new CDbConnection ( 'mysql:host=localhost;dbname=db_yii_tutorial','root','1234' ); /** เปิด Connection **/ $connection->active = true; /** ดึงข้อมูล **/ $sql = 'SELECT * FROM tbl_profile'; $command = $connection->createCommand($sql); $dataReader = $command->query(); foreach ($dataReader as $row) { echo $row['firstname'] . ' - ' . $row['lastname']; } /** ปิด Connection **/ $connection->active = false;
สร้าง Controller ใหม่ โดยกำหนด Controller ID เป็น "Member" ส่วน Action IDs ใส่เป็น "index" จากนั้นกด Preview
แสดงผลหลังกดปุ่ม Preview
จากนั้นแล้วกด Generate ต่อครับ ระบบจะสร้าง Member Controller ให้เราเรียบร้อย และแสดงผลหลังกด Generate
ลองเข้าไป test เรียกดูที่ path ของแต่ละคน จะได้หน้าตาแบบนี้
เข้าไปที่ URL : http://localhost/yii_tutorial/index.php?r=member
ให้เข้าไปแก้ไขไฟล์ "MemberController.php" ไดเรคทอรี่ [skeleton]/protected/controllers/MemberController.php
// ก่อน class MemberController extends Controller { public function actionIndex() { $this->render('index'); } public function actionShow() { $sql = "SELECT * FROM tbl_profile ORDER BY user_id ASC"; // คำสั่ง SQL ที่ต้องการ $dataProvider = new CSqlDataProvider($sql, array( // เอา sql แปลงเป็น dataProvider 'pagination' => array( 'pageSize' => 10, // กำหนดให้หน้านึงแสดง 10 รายการ ), 'keyField' => 'user_id', )); $this->render('show', array( 'dataProvider' => $dataProvider, // ส่งตัวแปรไปยัง view )); } };
ต่อไปเขียนคำสั่งสร้าง CGridView โดยทำการสร้างไฟล์ View ชื่อว่า show.php ในไดเรคทอรี่ [skeleton]/protected/views/member/show.php
$this->widget('zii.widgets.grid.CGridView', array( 'id' => 'profile-gridview', // ชื่อ CGridView 'dataProvider' => $dataProvider, // ตัวแปร data ที่มีข้อมูล 'enablePagination' => true, // กำหนดให้แสดงปุ่มเปลี่ยนหน้า 'columns' => array( // กำหนด column ที่จะแสดง array( 'header' => 'User ID', // ชื่อ Header (ตั้งเอง) 'name' => 'user_id', // ชื่อ Field ), array( 'header' => 'Firstname', // ชื่อ Header (ตั้งเอง) 'name' => 'firstname', // ชื่อ Field ), array( 'header' => 'Lastname', // ชื่อ Header (ตั้งเอง) 'name' => 'lastname', // ชื่อ Field ), ), ));
เพียงเท่านี้ครับ จากนั้นไปลอง preview ในหน้าเว็บเรา http://localhost/yii_tutorial/index.php?r=member/show
แสดงผลของ CSqlActiveReport ด้วย GridView สำเร็จแล้ว
หากเราสร้าง Model มาแล้วในบทที่ 7 การใช้งาน Gii Code Generator ก็สามารถเรียกใช้งานได้เลย ไม่ต้องสร้างใหม่ แต่หากยังไม่ได้สร้างไฟล์ Model ขึ้นมาแนะนำให้เข้าไปศึกษาวิธีการสร้างไฟล์ Model ได้จาก บทที่ 7 การใช้งาน Gii Code Generator ก่อน
แก้ไขไฟล์ MemberController.php ไดเรคทอรี่ [skeleton]/protected/controllers/MemberController.php
// in MemberController.php public function actionModel() { // Profile คือชื่อ Model ที่สร้างไว้ใน Gii $dataProvider = new CActiveDataProvider('Profile', array( 'pagination' => array( 'pageSize' => 10, // จำนวนรายการที่แสดงต่อหน้า ), )); $this->render('model', array( 'dataProvider' => $dataProvider, )); }
ต่อไปเขียนคำสั่งสร้าง CGridView โดยทำการสร้างไฟล์ View ชื่อว่า model.php ในไดเรคทอรี่ [skeleton]/protected/views/member/model.php
$this->widget('zii.widgets.grid.CGridView', array( 'id' => 'profile-gridview', // ชื่อ CGridView 'dataProvider' => $dataProvider, // ตัวแปร data ที่มีข้อมูล 'enablePagination' => true, // กำหนดให้แสดงปุ่มเปลี่ยนหน้า 'columns' => array( // กำหนด column ที่จะแสดง array( 'header' => 'User ID', // ชื่อ Header (ตั้งเอง) 'name' => 'user_id', // ชื่อ Field ), array( 'header' => 'Firstname', // ชื่อ Header (ตั้งเอง) 'name' => 'firstname', // ชื่อ Field ), array( 'header' => 'Lastname', // ชื่อ Header (ตั้งเอง) 'name' => 'lastname', // ชื่อ Field ), ), ));
เพียงเท่านี้ครับ จากนั้นไปลอง preview ในหน้าเว็บเรา http://localhost/yii_tutorial/index.php?r=member/model
แสดงผลของ CActiveDataProvider ด้วย GridView สำเร็จแล้ว
// ModelName ชื่อ Model ที่เราต้องการดึงข้อมูล $model = ModelName::model()->findAll(); foreach ($model as $rows){ // ตรง attribute_name ให้ใส่ชื่อ Attribute ของ Model จะสามารถเก็บค่าเข้าหรือดึงค่าออกได้ตามสะดวก echo $rows->attribute_name; // แสดงข้อมูล field attribute_name } // ตัวอย่าง $model = Profile::model()->findAll(); // return data (array) foreach ($model as $rows){ echo $rows->firstname; // แสดงข้อมูล field firstname }
1. การดึงข้อมูลออกจาก Database ออกมาทั้งหมด โดยไม่กำหนดเงื่อนไข
// ModelName ชื่อ Model ที่เราต้องการดึงข้อมูล $model = ModelName::model()->findAllByPk($pk); foreach ($model as $rows){ // ตรง attribute_name ให้ใส่ชื่อ Attribute ของ Model จะสามารถเก็บค่าเข้าหรือดึงค่าออกได้ตามสะดวก echo $rows->attribute_name; // แสดงข้อมูล field attribute_name } // ตัวอย่าง $model = Profile::model()->findAllByPk(1); // Field user_id (PK) = 1 foreach ($model as $rows){ echo $rows->firstname; // แสดงข้อมูล field firstname }
2. การดึงข้อมูลออกจาก Database ออกมาทั้งหมด โดยกำหนดเงื่อนไข คือ PK = $pk (ค่าที่ต้องการ)
// ModelName ชื่อ Model ที่เราต้องการดึงข้อมูล $model = ModelName::model()->findAllByAttributes(array('attributes_name' => $value)) foreach ($model as $rows){ // ตรง attribute_name ให้ใส่ชื่อ Attribute ของ Model จะสามารถเก็บค่าเข้าหรือดึงค่าออกได้ตามสะดวก echo $rows->attribute_name; // แสดงข้อมูล field attribute_name } // ตัวอย่าง // Field firstname = 'Administrator' $model = Profile::model()->findAllByAttributes(array('firstname' => 'Administrator')); foreach ($model as $rows){ echo $rows->firstname; // แสดงข้อมูล field firstname } // หรือ ตัวอย่าง // Field firstname = 'Administrator' $model = Profile::model()->findAllByAttributes(array( 'firstname' => 'Administrator', // Field firstname = 'Administrator' 'lastname' => 'Admin', // Field lastname = 'Admin' )); foreach ($model as $rows){ echo $rows->firstname; // แสดงข้อมูล field firstname }
3. การดึงข้อมูลออกจาก Database ออกมาทั้งหมด โดยกำหนดเงื่อนไข (array) คือ attributes_name = $value (ค่าที่ต้องการ)
// ModelName ชื่อ Model ที่เราต้องการดึงข้อมูล $model = ModelName::model()->find(); echo $model->attributes_name; // แสดงข้อมูล field attributes_name // ตัวอย่าง $model = Profile::model()->find(); // return data (array object) echo $model->firstname; // Administrator
4. การดึงข้อมูลออกจาก Database ออกมา 1 รายการ (รายการสุดท้าย) เท่านั้น โดยไม่กำหนดเงื่อนไข
// ModelName ชื่อ Model ที่เราต้องการดึงข้อมูล $model = ModelName::model()->findByPk($pk); echo $model->attributes_name; // แสดงข้อมูล field attributes_name // ตัวอย่าง $model = Profile::model()->findByPk(1); // Field user_id (PK) = 1 echo $model->firstname; // Administrator
5. การดึงข้อมูลออกจาก Database ออกมา 1 รายการ (รายการสุดท้าย) เท่านั้น โดยกำหนดเงื่อนไข คือ PK = $pk (ค่าที่ต้องการ)
// ModelName ชื่อ Model ที่เราต้องการดึงข้อมูล $model = ModelName::model()->findByAttributes(array('attributes_name' => $value)); echo $model->attributes_name; // แสดงข้อมูล field attributes_name // ตัวอย่าง $model = Profile::model()->findByAttributes(array( 'firstname' => 'Administrator', // Field firstname = 'Administrator' )); echo $model->firstname; // Administrator
6. การดึงข้อมูลออกจาก Database ออกมา 1 รายการ (รายการสุดท้าย) เท่านั้น โดยกำหนดเงื่อนไข (array) คือ attributes_name1 = $value1, attributes_name2 = $value2 (ค่าที่ต้องการ)
// ModelName ชื่อ Model ที่เราต้องการดึงข้อมูล $model = ModelName::model()->findAllBySql($sql);; foreach ($model as $rows){ // ตรง attribute_name ให้ใส่ชื่อ Attribute ของ Model จะสามารถเก็บค่าเข้าหรือดึงค่าออกได้ตามสะดวก echo $rows->attribute_name; // แสดงข้อมูล field attribute_name } // ตัวอย่าง // return data (array) $model = Profile::model()->findAllBySql("SELECT * FROM tbl_profile ORDER BY user_id DESC"); foreach ($model as $rows){ echo $rows->firstname; // แสดงข้อมูล field firstname }
7. การใช้คำสั่ง SQL ดึงข้อมูลออกจาก Database ออกมาทั้งหมด
// ModelName ชื่อ Model ที่เราต้องการดึงข้อมูล $model = ModelName::model()->findBySql($sql);; foreach ($model as $rows){ // ตรง attribute_name ให้ใส่ชื่อ Attribute ของ Model จะสามารถเก็บค่าเข้าหรือดึงค่าออกได้ตามสะดวก echo $rows->attribute_name; // แสดงข้อมูล field attribute_name } // ตัวอย่าง // return data (array) $sql = "SELECT * FROM tbl_profile WHERE user_id = 1 ORDER BY user_id DESC"; $model = Profile::model()->findBySql($sql); foreach ($model as $rows){ echo $rows->firstname; // แสดงข้อมูล field firstname }
8. การใช้คำสั่ง SQL ดึงข้อมูลออกจาก Database ออกมา 1 รายการ (รายการสุดท้าย) เท่านั้น
foreach ($model as $value){ // ตรง attribute_name ให้ใส่ชื่อ Attribute ของ Model จะสามารถเก็บค่าเข้าหรือดึงค่าออกได้ตามสะดวก echo $value->attribute_name; }
122 Village No.2 Soemsai Sub-district,
Soemngam District, Lampang. 52210
Phone: 087-725-4883 (AIS)
Web Developer :
Eakkabin Jaikeawma (MAX)
eakkabin_it@hotmail.com
Line ID : max-work
© 2015 - 2019 DriveSoftCenter.Net All rights reserved.