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() Метод примет в качестве аргумента имя таблицы базы данных.

Этот новый экземпляр используется для создания новой сущности. Установите необходимые значения с экземпляром новой сущности. Теперь мы должны вызвать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: // локальный / cakephp4 / пользователи / добавить

Выход

После выполнения вы получите следующий результат.

Данные будут сохранены в таблице пользователей, как показано ниже -