CakePHP - การทำงานกับฐานข้อมูล

การทำงานกับฐานข้อมูลใน CakePHP นั้นง่ายมาก เราจะเข้าใจการดำเนินการ CRUD (สร้างอ่านอัปเดตลบ) ในบทนี้

นอกจากนี้เรายังต้องกำหนดค่าฐานข้อมูลของเราใน config/app_local.php file.

'Datasources' => [
   'default' => [
      'host' => 'localhost',
      'username' => 'my_app',
      'password' => 'secret',
      'database' => 'my_app',
      'url' => env('DATABASE_URL', null),
   ],
   /*
      * The test connection is used during the test suite.
   */
   'test' => [
      'host' => 'localhost',
      //'port' => 'non_standard_port_number',
      'username' => 'my_app',
      'password' => 'secret',
      'database' => 'test_myapp',
      //'schema' => 'myapp',
   ],
],

การเชื่อมต่อเริ่มต้นมีรายละเอียดดังต่อไปนี้ -

'host' => 'localhost',
   'username' => 'my_app',
   'password' => 'secret',
   'database' => 'my_app',

คุณสามารถเปลี่ยนแปลงรายละเอียดเช่นโฮสต์ชื่อผู้ใช้รหัสผ่านและฐานข้อมูลตามที่คุณเลือก

เมื่อเสร็จแล้วตรวจสอบให้แน่ใจว่าได้อัปเดตแล้วใน config / app_local.php ในวัตถุ Datasources

ตอนนี้เราจะดำเนินการตามรายละเอียดข้างต้นไปที่ฐานข้อมูล phpmyadmin หรือ mysql ของคุณและสร้างผู้ใช้ my_app ดังที่แสดงด้านล่าง -

ให้สิทธิพิเศษที่จำเป็นและบันทึกไว้ ตอนนี้เรามีรายละเอียดฐานข้อมูลตามการกำหนดค่าที่กล่าวถึงใน app_local.php เมื่อคุณตรวจสอบหน้าแรกของ CakePHP นี่คือสิ่งที่คุณควรได้รับ -

ตอนนี้เราจะสร้างตารางผู้ใช้ต่อไปนี้ในฐานข้อมูล

CREATE TABLE `users` ( 
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `username` varchar(50) NOT NULL, 
   `password` varchar(255) NOT NULL, PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1

แทรกบันทึก

ในการแทรกบันทึกในฐานข้อมูลอันดับแรกเราต้องใช้ตาราง TableRegistryชั้นเรียน เราสามารถดึงอินสแตนซ์ออกจากรีจิสทรีโดยใช้get()วิธี. get() method จะใช้ชื่อของตารางฐานข้อมูลเป็นอาร์กิวเมนต์

อินสแตนซ์ใหม่นี้ใช้เพื่อสร้างเอนทิตีใหม่ กำหนดค่าที่จำเป็นด้วยอินสแตนซ์ของเอนทิตีใหม่ ตอนนี้เราต้องโทรไปที่ไฟล์save() วิธีการด้วย TableRegistry อินสแตนซ์ของคลาสซึ่งจะแทรกระเบียนใหม่ในฐานข้อมูล

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('/users/add', ['controller' => 'Users', 'action' => 'add']);
   $builder->fallbacks();
});

สร้างไฟล์ UsersController.php ไฟล์ที่ src/Controller/UsersController.php. คัดลอกรหัสต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/controller/UsersController.php

<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
use Cake\Datasource\ConnectionManager;
use Cake\Auth\DefaultPasswordHasher;
class UsersController extends AppController{
   public function add(){
      if($this->request->is('post')){
         $username = $this->request->getData('username');
         $hashPswdObj = new DefaultPasswordHasher;
         $password = $hashPswdObj->hash($this->request->getData('password'));
         $users_table = TableRegistry::get('users');
         $users = $users_table->newEntity($this->request->getData());
         $users->username = $username;
         $users->password = $password;
         $this->set('users', $users);
         if($users_table->save($users))
         echo "User is added.";
      }
   }
}
?>

สร้างไดเร็กทอรี Users ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ add.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Users/add.php

<?php
   echo $this->Form->create(NULL,array('url'=>'/users/add'));
   echo $this->Form->control('username');
   echo $this->Form->control('password');
   echo $this->Form->button('Submit');
   echo $this->Form->end();
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ http: // localhost / cakephp4 / ผู้ใช้ / เพิ่ม

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

ข้อมูลจะถูกบันทึกในตารางผู้ใช้ดังที่แสดงด้านล่าง -