Неопределенный индекс при доступе к связи OneToMany в сущности доктрины - PullRequest
0 голосов
/ 18 мая 2018

У меня есть следующая структура сущностей для моих таблиц: https://gist.github.com/melokki/e2e0d7c03ee71c37c1185602562da6af

$movie = $repository->findOneBy([
    'title' => 'movie title',
]);

Я пытаюсь получить доступ к источникам фильма, подобным этому:

$movie->getSources()

и основываясь на документацииЯ могу это сделать, но сейчас я получаю следующее уведомление

Notice: Undefined index: movie

и не могу понять, почему

Что-то не так с моим кодом?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Я выполнил команду doctrine: schema: validate и теперь думаю, что получил ее.

Моя проблема в том, что в MovieSchema для свойства $movie у меня есть две аннотации для поля: @ORM\Column(type="string", name="movie_id") и @ORM\JoinColumn(name="movie_id", referencedColumnName="id", nullable=false).

Я удалил первый и теперь получаю желаемый результат при вызове метода getSources.

Большое спасибо всем за потраченное время.

0 голосов
/ 18 мая 2018

На основе вашей ссылки на github для ваших сущностей:

Первый

Вы не можете сделать $movie->getSources(), так как в вашем поле нет поля с именем $sourcesКласс фильма

Секунда

В вашей сущности фильма есть поле с именем $movieSource, которое является отношением один-ко-многим.Это должно быть переименовано в $movieSources, потому что вы получите ArrayCollection объектов MovieSource

Я подозреваю, что вы хотите смоделировать отношение ManyToMany с Movie <-> Source?

Еслида, вы можете напрямую связать эти объекты друг с другом, не беспокоясь о промежуточной таблице, доктрина сделает это за вас.

См. здесь: https://www.doctrine -project.org / projects / doctrine-orm / en / 2.6 / reference / association-mapping.html # много-ко-многим-двунаправленным

Я настоятельно рекомендую отказаться от промежуточной таблицы, если для нее нет реального использования.

Но если вы хотите сохранить эту модель, вам придется вызвать (после изменения имени метода)

$movie->getMovieSources() 

и выполнить итерацию по этой коллекции.

for ($movie->getMovieSources() as $movieSource) {
  $moviesource->getSource();
}

ЭтоСкорее всего, ваша первоначальная ошибка исчезла с этими изменениями.

...