Задать вопрос
@Ryzhakov

Как дебажить references в fixtures doctrine? Или как вывести все reference?

Как это сделать? дампить в консоль ничего не получается, все игнорируется (
Вообще тупо застрял в том, что не могу вытащить объект класса, ничего лишнего

В одном классе:
$user = new User();
        $this->addReference('main_user', $user);


В другом классе:
$author = $this->getReference('main_user');
        $article->setAuthor($author);


Выдает ошибку

Argument 1 passed to App\Entity\Article::setAuthor() must be an instance of App\Entity\User or null, string given, called in C:\server\www\task\src\DataFixtures\ArticleFixture
s.php on line 52
  • Вопрос задан
  • 362 просмотра
Подписаться 2 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Ну вообще, вот здесь:
$this->getReference('main_user');
$article->setAuthor($author);

Вы забыли присвоить переменной $author результат получения референса, судя по всему.

А ещё я, наверное, странную вещь скажу, но дебажить очень хорошо можно с помощью дебаггера.
Ответ написан
@dosim86
Если решили работать с references в DoctrineFixtures, то обязательно нужно учитывать зависимости между фикстурами. В данном случае, и вообще в принципе, неизвестно в каком порядке нужно создавать фикстуры статьей и авторов, чтоб можно было статье присвоить уже созданного автора. И этот порядок надо явно указать в классе фикстуры, реализовав метод getDependencies интерфейса DependentFixtureInterface (из пакета Doctrine).

Так как только статья зависит от автора, то достаточно это указать в фикстуре статьи, например:
class ArticleFixture implements DependentFixtureInterface
{
    // ...

    public function getDependencies()
    {
        return [
            UserFixture::class,
        ];
    }
}

И теперь сначала будет создан пользователь, а потом статья и можно быть уверенным, что пользователь не будет null при $author = $this->getReference('main_user');
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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