2015-11-19 4 views
0

После того как я выполнял команды объяснены в Symfony2 книге:Symfony2 доктрина инженерный вопрос

php app/console doctrine:mapping:import --force AcmeBlogBundle xml 
php app/console doctrine:mapping:convert annotation ./src 
php app/console doctrine:generate:entities AcmeBlogBundle 

Это правильно создали XML-файлы, сгенерированные правильно примитивы.

Но когда я бегу:

php app/console doctrine:schema:validate 

Он говорит:

[Mapping] OK - Файлы отображения являются правильными.

[База данных] FAIL - Схема базы данных не синхронизируется с текущим файлом сопоставления.

Ok, так что я вслед за учебники, я бегу:

php app/console doctrine:schema:update --dump-sql 

И здесь я могу видеть, что есть много команд ALTER TABLE. Как это:

ALTER TABLE ea_restaurant_tag DROP FOREIGN KEY ea_restaurant_tag_ibfk_1; 

ALTER TABLE ea_restaurant_tag DROP FOREIGN KEY ea_restaurant_tag_ibfk_2; 

ALTER TABLE ea_restaurant_tag CHANGE id id INT AUTO_INCREMENT NOT NULL, CHANGE restaurant_id restaurant_id INT DEFAULT NULL, CHANGE login_id login_id INT DEFAULT NULL; 

ALTER TABLE ea_restaurant_tag ADD CONSTRAINT FK_10C17C7E5CB2E05D FOREIGN KEY (login_id) REFERENCES ea_login (id); 

ALTER TABLE ea_restaurant_tag ADD CONSTRAINT FK_10C17C7EB1E7706E FOREIGN KEY (restaurant_id) REFERENCES ea_restaurant (id); 

ОБНОВЛЕНО

Это SQL "создать" команду для restaurant_tag таблицы:

CREATE TABLE IF NOT EXISTS `ea_restaurant_tag` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`restaurant_id` int(10) unsigned NOT NULL, 
`login_id` int(10) unsigned DEFAULT NULL, 
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`), 
KEY `login_id` (`login_id`), 
KEY `restaurant_id` (`restaurant_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

ALTER TABLE `ea_restaurant_tag` 
ADD CONSTRAINT `ea_restaurant_tag_ibfk_1` FOREIGN KEY (`restaurant_id`)  REFERENCES `ea_restaurant` (`id`) ON DELETE CASCADE, 
ADD CONSTRAINT `ea_restaurant_tag_ibfk_2` FOREIGN KEY (`login_id`) REFERENCES `ea_login` (`id`) ON DELETE CASCADE; 

XML генерируемой Doctribne

<?xml version="1.0" encoding="utf-8"?> 
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine- mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> 
<entity name="AppBundle\Entity\EaRestaurantTag" table="ea_restaurant_tag"> 
<indexes> 
    <index name="login_id" columns="login_id"/> 
    <index name="restaurant_id" columns="restaurant_id"/> 
</indexes> 
<id name="id" type="integer" column="id"> 
    <generator strategy="IDENTITY"/> 
</id> 
<field name="date" type="datetime" column="date" nullable="false"> 
    <options> 
    <option name="default">CURRENT_TIMESTAMP</option> 
    </options> 
</field> 
<many-to-one field="login" target-entity="EaLogin" fetch="LAZY"> 
    <join-columns> 
    <join-column name="login_id" referenced-column-name="id"/> 
    </join-columns> 
</many-to-one> 
<many-to-one field="restaurant" target-entity="EaRestaurant" fetch="LAZY"> 
    <join-columns> 
    <join-column name="restaurant_id" referenced-column-name="id"/> 
    </join-columns> 
</many-to-one> 

Очень странно, что он пытается удалить текущие ключи и воссоздать другие. Почему это происходит?

База данных MySQL и все таблицы InnoDB.

+0

Пожалуйста, вставьте команду «create table» из MySQL и генерируемого XML. Спасибо – SilvioQ

+0

Добавлено в вопрос. Спасибо. –

+0

Попробуйте добавить параметр 'onDelete = 'CASCADE' 'в столбец соединения Doctrine пытается воссоздать. Это может быть причиной того, что Doctrine не распознает ваш текущий внешний ключ. – rodrigorigotti

ответ

0

Инструмент импорта Doctrine не поддерживает первичные ключи без знака. Вероятно, вам нужно определить его вручную, установив columnDefinition="INTEGER UNSIGNED" в JoinColumn или расширяя класс EntityGenerator.

Смежные вопросы