Я недавно обновил свои 3 сущности - тогда давайте назовем EntityA, EntityB и EntityC. Теперь я не могу получить данные или удалить запись из EntityB и EntityC. Я могу вставить и обновить, хотя. EntityA по-прежнему работает нормально.
Изменения следующие:
Я обновил столбец с int на bigint и изменил индекс для EntityA.
Я обновил индекс для EntityB и EntityC. EntityC также имеет несколько новых столбцов.
EntityB и EntityC оба имеют ограничение внешнего ключа, связанное с идентификатором EntityA. Я использую отношения manyToOne:
/**
* @var \Application\Entity\User
*
* @ORM\ManyToOne(targetEntity="Application\Entity\User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true)
* })
*/
private $user;
Я только что видел комментарий к другому вопросу о проверке схемы, и после использования orm:validate-schema
у меня возникла проблема с синхронизацией с моей базой данных:
[Сопоставление] OK - файлы сопоставления верны.
[Database] FAIL - схема базы данных не синхронизирована с текущим файлом сопоставления.
Я использовал orm:schema-tool:update --force
, чтобы исправить проблему:
[Сопоставление] OK - файлы сопоставления правильные.
[База данных] OK - схема базы данных синхронизирована с файлами сопоставления.
После этого я очистил все 3 кэша, используя:
orm:clear-cache:query
orm:clear-cache:metadata
orm:clear-cache:result
Есть идеи, почему я до сих пор не могу получить доступ к данным из EntityB и EntityC?
EDIT
Я новичок в доктрине, и я вручную обновил базу данных и сущности, которые, кажется, вызвали эту проблему. Должен ли я экспортировать данные, удалить таблицы, удалить объекты, воссоздать все и импортировать данные обратно? Как мне обновить мои БД и сущности в будущем?
РЕДАКТИРОВАТЬ 2
Я должен также упомянуть, что все работало отлично, прежде чем я внес изменения, перечисленные выше, и эти изменения не включают ограничение внешнего ключа. Это было с самого начала, когда все работало. Глядя на код еще раз, я понимаю, что удаление может действительно работать, но код терпит неудачу, прежде чем попасть туда при попытке извлечь запись:
$this->entityManager->getRepository(EntityC::class)->findOneBySomeField($details['someField']);