Создание БД и установка Doctrine ORM

Подключение базы данных в Docker. Конфигурирование через переменными окружения. Плюсы и минусы подходов DB-First и Code-First. Обзор Doctrine ORM. Установка библиотеки и регистрация EntityManager в DI контейнере.

Скрытый контент
Комментарии (17)
Arunas

Спасибо.

Ответить
Роман

Смотрю на это все и не понимаю, как один человек столько может знать не только в теории но и на практике.

Ответить
Arunas

Какой connection string url будет, если БД устроинна с наруже, не в докере? Если можете, напишите, пожалуйста (надо как то корегировать api/config/common/doctrine.php или нет).

Ответить
Дмитрий Елисеев

Тогда вместо хоста api-postgres указывают IP-адрес сервера с БД.

Ответить
Arunas

спасибо.

Ответить
Arunas

Как правильно делаются backup БД при работе в докерском окружении? Можно этот backup БД делать с кроном, какая практика с backup БД? (если можете, пакажите пример) Влиялить или нет на производительност сайта или надёжность данных backup БД?

Ответить
Дмитрий Елисеев

Можно обычным вызовом pgdump внутри контейнера:

docker-compose exec api-postgres pgdump ...
Ответить
Роман

Добрай день Дмитрий,спасибо за качественный материал, вопрос не по теме, но будет ли в курсе рассмотрена тема поднятие нескольких бд master-slaves (в частности для продакта), и работа с ними, а также разные типы блокировки postgresql ? Заранее блогадарю

Ответить
Дмитрий Елисеев

Репликации не будет. Но для этого можно взять образ bitnami/postgresql и настроить как в примере Setting up a streaming replication.

При работе с Doctrine рассмотрим оптимистическую блокировку. Во многих случаях её будет достаточно.

Ответить
Олег

не очень понятно, почему на 39:25 в консоль не вылетает ошибка, ведь array_merge_recursive сформирует вот такое значение под ключем cache_dir => array('DIR из common', 'null из dev'), а потом передаст это значение в createAnnotationMetadataConfiguration, и упадет в фаталом, что ждет строку, а не массив Как так?

Ответить
Олег

array_replace_recursive - не усмотрел

Ответить
Андрей

Вопрос о правах записи в одну и ту же папку кешу между контейнерами php-cli и php-fpm. Почему мы сделали запись в разные папки только для dev окружения, а для продакшена оставили без изменений? Ведь на продакшене такая же проблема будет...

Ответить
Дмитрий Елисеев

На продакшене не будет. Там контейнеры php-cli и php-fpm пишут каждый в свою внутреннюю папку, а не как в dev в одну общую, примонтированную через volume.

Ответить
Олег

Дмитрий, поясните пжл, что это за volumes:

 api-postgres:

Что это значит и где по факту хранятся данные?

Ответить
Дмитрий Елисеев

Значит, что создаётся вольюм с настройками по умолчанию.

В случае docker-compose хранятся в папке /var/lib/docker/volumes/auction_api-postgres

Ответить
elmut
<?php

use Shared\Domain\ValueObjects\UserId;

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @ORM\Table(name="auth_users")
 */
class AuthUser
{
    /**
     * @ORM\Column(type="user_id")
     * @ORM\Id
     */
    private UserId $id;

    /**
     * @ORM\OneToOne(targetEntity="UserPassword", cascade={"persist", "remove"}, mappedBy="userId")
     */
    protected ?UserPassword $joinPassword = null;
}

/**
 * @ORM\Entity()
 * @ORM\Table(name="auth_user_password")
 * @ORM\HasLifecycleCallbacks()
 */
class UserPassword
{
    /**
     * @ORM\Column(type="user_id")
     * @ORM\Id
     * @ORM\OneToOne(targetEntity="AuthUser", inversedBy="joinPassword")
     */
    private UserId $userId;

    /**
     * @ORM\Column(type="string")
     */
    private string $login;
}

Дмитрий, а как сделать так что бы AuthUser и UserPassword у них был один id?

Ответить
Дмитрий Елисеев

Со связью @ORM\OneToOne никак. Только вручную без неё.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий