สอน Yii 2 : ติดต่อฐานข้อมูล MySQL และ Insert ข้อมูล

yii2-framework
yii2-framework

สอน Yii 2 : ติดต่อฐานข้อมูล MySQL และ Insert ข้อมูล



การเชื่อมต่อฐานข้อมูลและการ Query ข้อมูลสำหรับ Yii Framework ค่อนข้างจะสะดวกสบายครับ เราสามารถสืบทอด
คุณสมบัติของคลาส ActiveRecord มาใช้งานได้ การสืบทอดคุณสมบัติคลาส ActiveRecord เป็นเสมือนการกำหนดให้
คลาสนั้นเป็น 1 table ในฐานข้อมูลและมีตัวแปรคือ column name ทั้งหมดใน table นั้น หลักการคล้าย ๆ กับการสร้าง

view และ controller ที่เมื่อสร้าง UserController ต้องมีโฟลเด้อชื่อว่า user ใน view


ในบทความที่แล้ว ใช้งาน Model ร่วมกับ View และ Controller เราได้ทำความเข้าใจและใช้งานส่วนของ view, controller และ model ในบทความนี้ จะใช้ไฟล์โปรเจคเดิมที่เราได้สร้างไว้ ซึ่งมีโครงสร้างดังนี้

models/User.php
views/user/index.php
controllers/UserController.php

สร้างฐานข้อมูลและ User Table ตามชื่อ Model

  • 1. ก่อนอื่นให้เราเข้าไปสร้างฐานข้อมูลโดยให้ตั้งชื่อว่า yii2basic


  • Yii2-ติดต่อฐานข้อมูล

  • 2. จากนั้นให้สร้าง Table โดยให้กำหนด column name ต่าง ๆ ดังรูปด้านล่าง


  • Yii2-ติดต่อฐานข้อมูล

  • 3. เปิดไฟล์ config/db.php เปลี่ยนรายละเอียดการติดต่อฐานข้อมูลให้ตรงกับที่เราตั้งไว้
  • return [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=yii2basic',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ];


  • 4. เสร็จแล้วให้เราไปแก้ไขไฟล์ models/User.php โดยให้เปลี่ยนจาก extends Models เป็น ActiveRecord ดังนี้

  • namespace app\models;
    
    use Yii;
    use yii\db\ActiveRecord;
    class User extends ActiveRecord // เปลี่ยนมาใช้คุณสมบัติของ ActiveRecord คลาส
    {
    	public static function tableName()
        {
            return 'User'; // เป็นการบอกว่าจะควบคุม table ไหนในฐานข้อมูล
        }
       
    }

ทดสอบ Insert ข้อมูลเข้าไปในฐานข้อมูล

จากการที่เราได้สร้าง table ในฐานข้อมูลและทำการสืบทอดคุณสมบัติ ActiveRecord จะทำให้เราสามารถสั่ง insert
ข้อมูลลงไปใน User table ได้ด้วยคำสั่ง $User->save() และสามารถกำหนด value ใน column ต่าง ๆ ได้ดังนี้

$User = new User();
$User->name = "Witoon Pomipon";
$User->email = "[email protected]";
$User->save();

ให้ทดสอบโดยการเปิดไฟล์ controllers/UserController.php และแก้ไขโค๊ดในไฟล์เดิมเป็นตามโค๊ดด้านล่างครับ

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\User; // เปิดการเข้าถึง User Model

class UserController extends Controller
{
    public function actionIndex()
    {
	$User = new User(); // ประกาศตัวแปร $User มีค่าเท่ากับ User Model
	$User->name = "Witoon Pomipon";
	$User->email = "[email protected]";
	$User->save();

        return $this->render('index', [ // สั่ง render หน้า index view
            'User' => $User, // พร้อมกับส่ง User Model ออกไปด้วย
        ]);
    }
}

ส่วนใน views/user/index.php เราจะเขียนเพื่อแสดงผล name และ email ได้ดังนี้ครับ

<div class="site-about">
     <p>
        Hi, I am beginner in Yii นาจาา <?php echo $User->name." / ".$User->email; ?>
    </p>
</div>

ถ้าลองรันตัวเว็บผ่านโปรแกรมเว็บเบราว์เซอร์ผลลัพธ์ที่ได้ คือ

Hi, I am beginner in Yii นาจาา Witoon Pomipon / [email protected]

ข้อมูล name และ email ที่เราระบุไว้ก็จะถูกบันทึกลงในฐานข้อมูล


Yii2-ติดต่อฐานข้อมูล


เพิ่มเติมครับ จากตัวอย่างข้างบนจะเป็นการ insert ข้อมูลลงใน table User ถ้าเราต้องการจะ select ขึ้นมา
สามารถเขียนคำสั่งได้ประมาณนี้ครับ

$result = User::find()->where(['id' => 4])->one();
echo $result['name']." / ".$result['email'];

หวังว่าจะเป็นประโยชน์นะครับ ไว้เจอกันในบทความต่อไปครับ