Доктрина 2 многоуровневое наследование - как определить соединение - PullRequest
0 голосов
/ 15 января 2019

У меня есть две таблицы:

E-mail:

id    message
1    This is an email message

Активность:

id    related_id    related_type
66    1    email
72    1    booking
74    55    booking

В построителе запросов я хочу присоединить Email.id к Activity.related_id только , если related_type - 'email'.

Поэтому у меня есть Entity Activity:

/**
 * Activity
 *
 * @ORM\Table(name="activity")
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="related_type", type="string")
 * @ORM\DiscriminatorMap( {"email" = "Email"} )
 */
class Activity

И электронная почта организации:

/**
 * Email
 *
 * @ORM\Table(name="email", indexes={@ORM\Index(name="contact_id_index", columns={"contact_id"})})
 * @ORM\Entity(repositoryClass="Cinolla\ApiBundle\Entity\EmailRepository")
 */
class Email extends Activity

Однако, глядя на запрос, который доктрина генерирует в данный момент, он делает:

FROM email t0 INNER JOIN activity t1 ON t0.id = t1.id

Принимая во внимание, что он должен делать:

FROM email t0 INNER JOIN activity t1 ON t1.related_id = t0.id AND t1.related_type = 'email'

  • Где я могу определить, что электронная почта должна быть присоединена к related_id?
  • Почему он не включил AND t1.related_type = 'email'?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...