У меня есть две модели во многих отношениях. Давайте используем в качестве примера лекторов и студентов.
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']); } }
Теперь, когда я хочу добавить студентов к лекторам, мне нужно всего лишь:
$lecturerA = new Lecturer(); $studentA = new Student(); $studentB = new Student(); $lecturerA->Students = [$studentA, $studentB]; $lecturerA->save();
Все это работает так, как я ожидал.
Проблема возникает в моем приложении, когда я импортирую несколько записей в одну транзакцию, и мне нужно добавить второй массив к этой связи.
Итак, в примере:
$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();
В этом случае сохраняются только элементы, добавленные во второе присвоение Students
. Предмет (ы) из первого присвоения теряются. Поэтому в моем примере в studentC
studentD
будут записываться только studentC
и studentD
.
Есть ли правильный способ сделать это – добавить к предыдущему массиву «многие ко многим» – в Phalcon? У меня есть альтернативный (messier) способ сделать это в классе, который выполняет импорт, но если есть правильный способ, я бы предпочел использовать это.