我正在研究通知系统,所以我有一个通知抽象类和子类(forumPostNotification,privateMessageNotification等).它们使用单表继承存储,因此它们都在一个具有区分字段的表中.
我希望立即获得适用于用户的所有通知,而不必单独查询每种类型的通知,但是我不确定如何在DQL / symfony中执行此操作(在SQL中这很容易).
我将添加一些代码以便澄清:
Notification.php
/**
* Notification Class
*@ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({
* "notification"="Notification",
* "forumPostNotification"="ForumPostNotification",
* ...
* })
* @ORM\Table(name="notification")
*/
abstract class Notification
{
/**
* @ORM\ManyToOne(targetEntity="Acme\MainBundle\Entity\User", inversedBy="notifications")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
//...
}
ForumPostNotification.php
/**
* Forum Post Notification
* @ORM\Entity
*/
class ForumPostNotification extends Notification
{
//..
}
PrivateMessageNotification.php
/**
* Private Message Notification
* @ORM\Entity
*/
class PrivateMessageNotification extends Notification
{
//..
}
我希望能够以这样或那样的方式做这样的事情(我明白我不能从Notification中查询,因为它是一个抽象类.我只是这样写它来传达我想要实现的东西):
$notifications = $em->createQuery('
SELECT n
FROM AcmeMainBundle:Notification n
WHERE n.dateDeactivated IS NULL
ORDER BY n.dateCreated ASC
')->getResult();