symfony2の余分なフィールドとの多対多の関係を処理するフォームを作成するための最良の方法は何でしょうか。
この例では、ユーザーへの通知機能を作成したいとします。私にはUser
とNotification
エンティティがあります。また、エンティティ間の多対多の関係にパラメータを追加できるようにするために、3番目のエンティティを作成しました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
エンティティを作成する必要があったため、その方法がわかりません。ご協力いただきありがとうございます ;)