Zend 3 Doctrine ORM не может найти сущности - PullRequest
0 голосов
/ 10 января 2019

Я недавно обновил свои 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']);
...