Как использовать addXXX() вместо setXXX() при генерации фикстур для ManyToMany с использованием nelmio/alice?

В моем учебном проекте на Symfony4, между двумя Entity (Image и Gallery) имеется связь ManyToMany. Использую пакет nelmio/alice для генерации фикстур, с которыми и возникла сложность.

Для работы ManyToMany в Doctrine необходимы методы addImage() и addGallery(). На этих методах и строится вся логика галереи. Но, чтобы фикстуры отрабатывали, обязательно нужны методы setImage() и setGallery(), которые не нужны ни мне, ни Doctrine. Самое главное, что эти методы могут быть пустыми - фикстуры все равно отрабатывают корректно, важно чтобы они просто были:
// if I delete this method, the fixtures do not work - shows an error 
    public function setGallery(Gallery $gallery)
    {
//        $this->addGallery($gallery);
    }

    /**
     * @param $gallery Gallery
     */
    public function addGallery(Gallery $gallery)
    {
        if ($this->galleries->contains($gallery)) {
            return;
        }

        $this->galleries->add($gallery);
        $gallery->addImage($this);
    }

И такая ситуация везде, где есть связь ManyToXXX - везде лишние методы для установки и чтения свойств.

Чтобы переопределить поведение генератора фикстур на использование методов add*() вместо set*(), нужно написать `Custom Accessor` (https://github.com/nelmio/alice/blob/master/doc/ad... но я совсем не могу понять как это работает. Совсем. Руки опускаются от безисходности.

Я не думаю, что у меня уникальная ситуация - часто приходится использовать связи ManyToXXX. Пожалуйста, подскажите, как написать этот сервис.
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
nickicool
@nickicool Автор вопроса
Да, это просто моя ошибка... чему я очень рад, т.к. не придется писать и разбираться в проперти аксессорах, пока. Все оказалось банально - я тупо неправильно составил yaml фаил фикстур. Там где у Entity должно быть свойство во множественном числе "galleries:", было "gallery:". Аналогично со свойством "images:".

Удивительно, что оно вообще работало столько времени, пока я не обратил внимание на "ненужные" методы, которые дублировали функционал.

Тяжело пока идет обучение.

Прошу прощения за абсолютно бесполезный топик. ))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
voronkovich
@voronkovich
Николай Егоров, Все должно работать без сеттера. Посмотрите мануал от KNPUniversity: https://knpuniversity.com/screencast/collections/m...

Приведите текст ошибки. Я не думаю, что люди пользовались бы этой библиотекой при наличии описанного вами бага.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы