У меня есть следующая структура сущностей для моих таблиц: https://gist.github.com/melokki/e2e0d7c03ee71c37c1185602562da6af
$movie = $repository->findOneBy([
'title' => 'movie title',
]);
Я пытаюсь получить доступ к таким источникам фильмов:
$movie->getSources()
и на основе документации я могу это сделать, но сейчас я получаю следующее уведомление
Notice: Undefined index: movie
и я не могу понять почему
Что-то не так с моим кодом?
Сообщение об ошибке означает, что где-то вы пытаетесь получить доступ к массиву с индексом «фильм». Вероятно, не имеет отношения к getSources (). Может быть, вы забыли добавить $ movie к своим данным о ветке? Просто дикая догадка. Найдите фильм в своем коде и посмотрите, что появится.
Я не пытаюсь получить доступ к методу getSources() из представления. Я в команде cli. Судя по документации из Doctrine, мои сущности верны, но что-то все еще не так, и я не могу понять, что именно. Я понимаю, что индекс movie отсутствует, но не могу понять, как его установить. уведомление исходит от BasicEntityPersister
На самом деле ничего не выскакивает из ваших сопоставлений по существу. Убедитесь, что у вас нет старых файлов сопоставления yaml / xml, скрытых в разделе "Ресурсы". Суть не показывает Movie :: getSources, поэтому я не могу сказать, проблема ли в этом. Я также не могу сказать, является ли Movie :: movieSource массивом. Судя по написанию, это не так.






На основе вашей ссылки на github для ваших объектов:
Первый
Вы не можете сделать $movie->getSources(), так как в вашем классе Movie нет поля с именем $sources
Второй
В вашем объекте-фильме есть поле с именем $movieSource, которое является отношением "один ко многим". Его следует переименовать в $movieSources, потому что вы получите ArrayCollection объектов MovieSource.
Я подозреваю, что вы хотите смоделировать отношение ManyToMany с помощью Movie <-> Source?
Если да, вы можете напрямую связать эти объекты друг с другом, не беспокоясь о промежуточной таблице, doctrine сделает это за вас.
Я настоятельно рекомендую отказаться от промежуточной таблицы, если для нее нет реального использования.
Но если вы хотите сохранить эту модель, вам придется вызвать (после изменения имени метода)
$movie->getMovieSources()
и перебрать эту коллекцию.
for ($movie->getMovieSources() as $movieSource) {
$moviesource->getSource();
}
Скорее всего, ваша исходная запрошенная ошибка исчезла с этими изменениями.
Вы правы, я хочу смоделировать отношения "многие ко многим" между фильмом и источником, но в то же время я хочу сохранить некоторую дополнительную информацию в сводной таблице (описание фильмов), это может быть плохо, но на данный момент у меня нет других идей, как сохранить описание фильма, поскольку оно разное для каждого источника. Мой метод getSources фактически возвращает свойство объекта movieSource, поэтому я пытаюсь вызвать этот метод. Попробую обновить суть полным кодом. Также свойство movieSource инициализируется как ArrayCollection в конструкторе.
Нет, это не плохо. Если есть необходимость (как в вашем случае), все в порядке. Но пока вы не можете использовать $ movie-> getSources (), пока не реализуете такой метод (на мой взгляд, нет правильного дизайна). Ошибка исчезла? А как насчет класса AbstractEntity?
Я выполнил команду doctrine:schema:validate и теперь думаю, что понял. Моя проблема в том, что в MovieSchema для свойства $movie у меня есть две аннотации для поля @ORM\Column(type = "string", name = "movie_id") и @ORM\JoinColumn(name = "movie_id", referencedColumnName = "id", nullable=false). Я удалил первый и теперь получаю желаемый результат при вызове метода getSources. Большое спасибо за ваше время.
Я выполнил команду doctrine: schema: validate и теперь, кажется, понял.
Моя проблема в том, что в MovieSchema для свойства $movie у меня есть две аннотации для поля: @ORM\Column(type = "string", name = "movie_id") и @ORM\JoinColumn(name = "movie_id", referencedColumnName = "id", nullable=false).
Я удалил первый и теперь получаю желаемый результат при вызове метода getSources.
Большое спасибо за ваше время.
Возможный дубликат PHP: «Примечание: неопределенная переменная», «Примечание: неопределенный индекс» и «Примечание: неопределенное смещение»