Невозможно создать таблицу в MySQL, используя Doctrine и Symfony2

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

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

27
задан j0k 20 September 2012 в 07:29
поделиться

3 ответа

Я получил эту ошибку при редактировании моего файла Product.orm.yml.

Я добавил новое отношение manyToMany с сущностью Category и допустил ошибку в строке joinTable:

manyToMany:
  categories:
    targetEntity: Acme\ProductBundle\Entity\Category
    inversedBy: products
    joinTable:
      name: Product  # My mistake: joinTable should be something like ProductCategory

    [...]

Действительно, это глупая ошибка, которой я все равно поделюсь.

4
ответ дан sglessard 20 September 2012 в 07:29
поделиться

Если вы можете, вы можете сделать это, как это работает для меня:

Удалить всю базу данных:

app/console doctrine:schema:drop --force --full-database

Запустить все миграции БД:

app/console doctrine:migrations:migrate

1
ответ дан crmpicco 20 September 2012 в 07:29
поделиться

У меня была эта проблема с отношением «Один ко многим, однонаправленный с таблицей соединения» , как ( см. Doctrine Doc ). Я не нашел такого случая ошибки с этим типом отношения через Интернет или через стековый поток, поэтому я выкладываю здесь свое решение, чтобы позволить другим помочь с той же проблемой.

Что вызвало эту проблему:

  1. После обратного проектирования устаревших таблиц БД с ORM ( см. Документ «Как генерировать объекты из существующей базы данных» ), все таблицы также только таблицы соединений получили сущностный класс PHP.
  2. С аннотациями на объект категории я описал присоединение. Результаты этого кода:
/**
 * @ORM\ManyToMany(targetEntity="Category")
 * @ORM\JoinTable(name="category_child",
 *     joinColumns={@JoinColumn(name="category_id", referencedColumnName="id")},
 *     inverseJoinColumns={@JoinColumn(name="category_child_id", referencedColumnName="id")}
 * )
 */
public $children;
  1. @ORM\JoinTable(name="category_child" вызвало, что доктрина хочет создать эту таблицу снова. Один раз из-за уже существующего объекта Category_Child, а затем выражения @ORM\JoinTable, которое указывает на ту же таблицу.

Решение

Решение состояло в том, чтобы удалить сущность Category_Child, которая была создана из реверс-инжиниринга. Если вы использовали сущность Category_Child в некоторых запросах $ em, вы должны выбрать эти данные в обратном направлении. Например. Через родителя, который хранит эти дочерние данные в ArrayCollection, или через DBAL.

0
ответ дан Fabian Picone 20 September 2012 в 07:29
поделиться
Другие вопросы по тегам:

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