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`..
В 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 автоматически обеспечит объединение данных из связанных таблиц при запросах.
В 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 автоматически обеспечит объединение данных из связанных таблиц при запросах.