Doctrine архитектура и построение связей, как правильно? Помогите советом. Есть допустим три таблицы table_user, table_email, table_code.
- `table_user` содержит первичный ID поле с именем `user_id`
- далее в таблицах `table_email` и `table_code` есть поле `user_id`
То есть, в таблице `table_user` нет ни поля `email_id` ни поля `code_id` при этом джоинами легко вытянуть все данные о пользователе одним запросом.
Как такое реализуется в Доктрине на уровне объявления связей? Я просто нашел только способ, при котором нужно добавлять в `table_user` поля `email_id`, `code_id`..

21 Авг 2019 в 07:05
210 +1
0
Ответы
1

В Doctrine вы можете объявить связи между сущностями при помощи аннотаций или XML-конфигурации. В вашем случае, если у вас есть таблицы table_user, table_email и table_code, и у таблиц table_email и table_code есть поле user_id, то вы можете объявить связи между этими таблицами следующим образом:

use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="table_user")
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $user_id;
// Другие поля сущности User
/**
* @ORM\OneToOne(targetEntity="Email")
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
*/
private $email;
/**
* @ORM\OneToOne(targetEntity="Code")
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
*/
private $code;
// Геттеры и сеттеры для email и code
}
/**
* @ORM\Entity
* @ORM\Table(name="table_email")
*/
class Email
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $email_id;
// Другие поля сущности Email
// Нет необходимости в объявлении связи сущности Email к User, поскольку связь уже объявлена в сущности User
}
/**
* @ORM\Entity
* @ORM\Table(name="table_code")
*/
class Code
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $code_id;
// Другие поля сущности Code
// Нет необходимости в объявлении связи сущности Code к User, поскольку связь уже объявлена в сущности User
}

В этом примере, сущность User имеет связи OneToOne с сущностями Email и Code по полю user_id. Нет необходимости добавлять поля email_id и code_id в таблицу table_user. Doctrine автоматически обеспечит объединение данных из связанных таблиц при запросах.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 340 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир