Подтвердить что ты не робот

Таблица уже существует

Я использую doctrine 2 в zend framework 2. Ниже мой файл сущности. Проблема в том, что когда я пытался проверить использование схемы,

./vendor/bin/doctrine-module orm:validate-schema

команды.

Я получаю ошибку,

[Doctrine\DBAL\Schema\SchemaException]                               
The table with name 'database.opportunitycriteria' already exists.

Что мне делать?

namespace Administration\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * OpportunityCriteria
 *
 * @ORM\Table(name="OpportunityCriteria")
 * @ORM\Entity
 */
class Criteria
{
/**
 * @var integer
 * @ORM\Id
 * @ORM\Column(name="criteria_id", type="integer", nullable=false)
 */
private $criteria_id;

/**
 * @var string
 *
 * @ORM\Column(name="description", type="string", nullable=false)
 */
private $description;
}

и соответствующие методы получения и установки.

4b9b3361

Ответ 1

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

У меня были следующие объекты:

class Cuisine {
    /**
     * @ManyToMany(targetEntity="Dish")
     * @ORM\JoinTable(name="CuisineDish", ...)
     */
    protected $dishes;
}

class Dish {
    /**
     * @ORM\ManyToMany(targetEntity="Cuisine")
     * @ORM\JoinTable(name="CuisineDish", ...)
     */
    protected $cuisines;
}

Не хватало свойств inversedBy и mappedBy аннотаций @ManyToMany. Они необходимы только тогда, когда ассоциация двунаправлена.

Итак, теперь правильно отображаемые объекты выглядят следующим образом:

class Cuisine {
    /**
     * @ManyToMany(targetEntity="Dish", inversedBy="cuisines")
     * @ORM\JoinTable(name="CuisineDish", )
     */
    protected $dishes;
}

class Dish {
    /**
     * @ORM\ManyToMany(targetEntity="Cuisine", mappedBy="dishes")
     * @ORM\JoinTable(name="CuisineDish", ...)
     */
    protected $cuisines;
}

И orm:validate-schema больше не выходит с исключением.

Сообщение об исключении просто вводит в заблуждение, так как эта операция не изменяется. Кроме того, эта проблема обнаруживается только при проверке синхронизации с базой данных, а не при проверке только сопоставления (--skip-sync), где она должна.

Я просто сообщил об этой ошибке.

Ответ 2

он может вызвать это сообщение об ошибке, если вы хотите использовать имя таблицы, которое уже используется одним из установленных пакетов.