Zastanawiam się, jaki jest najlepszy sposób utworzenia formularza, który obsługuje relację wiele do wielu z dodatkowym polem w symfony2.Renderowanie relacji wiele do wielu z dodatkowymi polami do postaci
Dla przykładu załóżmy, że chciałbym stworzyć funkcję powiadamiania dla użytkowników. Mam obiekty User
i Notification
. Również, aby móc dodać dodatkowe parametry w relacji wiele do wielu pomiędzy jednostkami, utworzyłem trzeci podmiot: UserNotification
. Dodatkowy parametr wskazuje, czy powiadomienie zostało przeczytane, czy nie przez użytkowników.
* @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;
...
}
ten sposób jestem w stanie uzyskać tego rodzaju danych
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 |
+---------+-----------------+---------+
Ok teraz tutaj jest problem, jak zrobić formularz, który pozwoli na wysłanie powiadomienia do niektórych użytkowników? W klasycznej relacji wielu do wielu nie stanowiło to problemu. Miałem NotificationType
z następującym builder
:
$builder->add('users', 'entity', array(
'class' => 'User',
'property' => 'name',
'multiple' => 'true',
))
->add('message', 'text');
Ale ponieważ musiałem utworzyć pośredni UserNotification
podmiot, nie mam pojęcia jak to zrobić. Dziękuję za pomoc;)
Dzięki za y nasza odpowiedź Gremo;) Nie wiedziałem o właściwości 'property_path'. I działa jak urok. –