CakePHP - Trabalhando com Banco de Dados

Trabalhar com banco de dados no CakePHP é muito fácil. Vamos entender as operações CRUD (Criar, Ler, Atualizar, Excluir) neste capítulo.

Além disso, também precisamos configurar nosso banco de dados em 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',
   ],
],

A conexão padrão tem os seguintes detalhes -

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

Você pode alterar os detalhes, ou seja, host, nome de usuário, senha e banco de dados de acordo com sua escolha.

Feito isso, certifique-se de que ele esteja atualizado em config / app_local.php no objeto Datasources.

Agora, continuaremos com os detalhes acima, vá para o banco de dados phpmyadmin ou mysql e crie o usuário my_app como mostrado abaixo -

Dê os privilégios necessários e salve-o. Agora, temos os detalhes do banco de dados de acordo com a configuração mencionada em app_local.php. Quando você verifica a página inicial do CakePHP, isto é o que você deve obter -

Agora, vamos criar a seguinte tabela de usuários no banco de dados.

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

Insira um registro

Para inserir um registro no banco de dados, primeiro precisamos obter uma tabela usando TableRegistryclasse. Podemos buscar a instância fora do registro usandoget()método. oget() método tomará o nome da tabela do banco de dados como argumento.

Esta nova instância é usada para criar uma nova entidade. Defina os valores necessários com a instância da nova entidade. Agora temos que ligar para osave() método com TableRegistry instância da classe que irá inserir novo registro no banco de dados.

Exemplo

Faça alterações no config/routes.php arquivo conforme mostrado no programa a seguir.

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();
});

Criar uma UsersController.php arquivo em src/Controller/UsersController.php. Copie o código a seguir no arquivo do controlador.

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.";
      }
   }
}
?>

Crie um diretório Users em src/Template e sob esse diretório crie um Viewarquivo chamado add.php. Copie o código a seguir nesse arquivo.

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();
?>

Execute o exemplo acima visitando o seguinte URL. http: // localhost / cakephp4 / users / add

Resultado

Após a execução, você receberá a seguinte saída.

Os dados serão salvos na tabela de usuários conforme mostrado abaixo -