我想知道创建一个处理与 symfony2 中的额外字段的多对多关系的表单的最佳方法是什么。
例如,假设我想为用户创建一个通知功能。我有User
和Notification
实体。另外为了能够在实体之间的多对多关系中添加额外的参数,我创建了第三个实体UserNotification
。额外参数指示用户是否已阅读通知。
* @ORM\Entity() */
class Notification
{
/** @Id @Column(type="integer") */
private $id;
/** @OneToMany(targetEntity="UserNotification", mappedBy="notification") */
private $usernotifications;
/** @Column() */
private $message;
...
}
* @ORM\Entity() */
class User
{
/** @Id @Column(type="integer") */
private $id;
/** @OneToMany(targetEntity="UserNotification", mappedBy="user") */
private $usernotifications;
/** @Column() */
private $name;
...
}
* @ORM\Entity() */
class UserNotification
{
/** @ManyToOne(targetEntity="User", inversedBy="usernotifications")
private $user;
/** @ManyToOne(targetEntity="Message", inversedBy="usernotifications")
private $message;
/** @Column(type="boolean") */
private $isRead;
...
}
这样我就可以得到这种数据
User
+----+---------+
| id | name |
+----+---------+
| 1 | John |
| 2 | Paul |
+----+---------+
Notification
+----+----------------------+
| id | message |
+----+----------------------+
| 1 | Cool stuff |
| 2 | Lorem ipsum |
+----+----------------------+
UserNotification
+---------+-----------------+---------+
| user_id | notification_id | isRead |
+---------+-----------------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 0 |
| 1 | 2 | 0 |
| 2 | 2 | 1 |
+---------+-----------------+---------+
好的,现在问题来了,如何制作一个允许向某些用户发送通知的表单?对于经典的多对多关系,这不是问题。我有NotificationType
以下内容builder
:
$builder->add('users', 'entity', array(
'class' => 'User',
'property' => 'name',
'multiple' => 'true',
))
->add('message', 'text');
但由于我必须创建中间UserNotification
实体,我不知道该怎么做。谢谢你的帮助 ;)