J'ai deux modèles dans une relation de plusieurs à mai - utilisons des conférenciers et des étudiants comme exemple.Ajouter des éléments à Phalcon Relation plusieurs-à-plusieurs
class Lecturer
{
public function initialize()
{
$this->hasMany('studentId', 'Model\Entity\LecturerStudent', 'studentId', ['alias' => 'LecturerStudent']);
$this->hasManyToMany(
'lecturerId',
'Model\Entity\LecturerStudent',
'lecturerId',
'studentId',
'Model\Entity\Student',
'studentId',
['alias' => 'Students']
);
}
}
class LecturerStudent
{
public function initialize()
{
$this->belongsTo('studentId', 'Model\Entity\Student', 'studentId', ['alias' => 'Student']);
$this->belongsTo('lecturerId', 'Model\Entity\Lecturer', 'lecturerId', ['alias' => 'Lecturer']);
}
}
class Student
{
public function initialize()
{
$this->hasMany('lecturerId', 'Model\Entity\LecturerStudent', 'lecturerId', ['alias' => 'LecturerStudent']);
}
}
Maintenant, quand je veux ajouter des étudiants aux enseignants tout ce que je dois faire est:
$lecturerA = new Lecturer();
$studentA = new Student();
$studentB = new Student();
$lecturerA->Students = [$studentA, $studentB];
$lecturerA->save();
Tout cela fonctionne comme je pense.
Le problème se pose dans mon application lorsque j'importe un certain nombre d'enregistrements dans une transaction et que j'ai besoin d'ajouter un second tableau à la relation.
Ainsi, dans l'exemple:
$lecturerA = new Lecturer();
$studentA = new Student();
$studentB = new Student();
$lecturerA->Students = [$studentA, $studentB];
... other code doing other things ...
$studentC = new Student();
$studentD = new Student();
$lecturerA->Students = [$studentC, $studentD];
... more code ...
$lecturerA->save();
Dans ce cas, seul l'élément (s) ajouté dans la deuxième affectation à Students
sont enregistrés. Les articles de la première affectation sont perdus. Donc, dans mon exemple, seuls studentC
et studentD
seront écrits dans la base de données.
Existe-t-il une manière correcte de faire ceci - pour ajouter à une précédente rangée many-to-many - dans Phalcon? J'ai une alternative (messier) de faire cela dans la classe qui effectue l'importation, mais si c'est la bonne façon, je préférerais de beaucoup l'utiliser.