У меня есть две таблицы:
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'
?