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 / пользователи / добавить
Выход
После выполнения вы получите следующий результат.
Данные будут сохранены в таблице пользователей, как показано ниже -