Mi chiedo quale sia il modo migliore per creare un modulo che gestisca una relazione molti-a-molti con il campo extra in symfony2.Rendi una relazione molti-a-molti con campi aggiuntivi in un modulo
Per l'esempio, diciamo che mi piacerebbe creare una funzione di notifica per gli utenti. Ho le entità User
e Notification
. Inoltre, per poter aggiungere parametri aggiuntivi nella relazione molti-a-molti tra entità, ho creato una terza entità UserNotification
. Il parametro extra indica se la notifica è stata letta o meno dagli utenti.
* @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;
...
}
In questo modo sono in grado di ottenere questo tipo di dati
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 ora qui è il problema, come fare una forma che consente di inviare una notifica ad alcuni utenti? Con una classica relazione molti-a-molti non era un problema. Ho avuto un NotificationType
con il seguente builder
:
$builder->add('users', 'entity', array(
'class' => 'User',
'property' => 'name',
'multiple' => 'true',
))
->add('message', 'text');
Ma dal momento che ho dovuto creare la UserNotification
entità intermedia, non ho idea di come farlo. Grazie per il tuo aiuto;)
Grazie per y la nostra risposta Gremo;) non ero a conoscenza della proprietà 'property_path'. E funziona come un fascino. –