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 / ผู้ใช้ / เพิ่ม
เอาต์พุต
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้
ข้อมูลจะถูกบันทึกในตารางผู้ใช้ดังที่แสดงด้านล่าง -