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
231 +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
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир