2012-06-11 4 views
1

Я развернул свой проект на новом сервере и ошибкой «SQLSTATE [23000]: Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не отображается» появляется, когда я пытаюсь вставить класс с наследованием:Наследование наследования Doctrine2 - 1452: Нарушение ограничения целостности

/** 
* @ORM\Table(name="prosante") 
* @ORM\Entity 
*/ 

class ProSante extends Base 
{ 

    /** 
    * @ORM\Column(type="string") 
    */ 
    protected $firstName; 
} 


/** 
* @ORM\Table(name="base") 
* @ORM\Entity(repositoryClass="Test\MyBundle\Entity\BaseRepository") 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="discr", type="string") 
* @ORM\DiscriminatorMap({"base" = "Base", 
*      "prosante" = "ProSante", 
*      "pharmacie" = "Pharmacie"}) 
*/ 

abstract class Base 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 
} 

Вход:

[2012-06-11 15:42:46] doctrine.DEBUG: INSERT INTO base (name) VALUES (?) ({"1":"Blabla"}) [] [] 
[2012-06-11 15:42:46] doctrine.DEBUG: INSERT INTO prosante (id, firstname) VALUES (?, ?) ({"1":"0","2":"PATRICK"}) [] [] 

Я не знаю, что делать, так как ошибка не появляется, когда я сделать то же INSERT на локальном хосте.

EDIT Я проверяю «SELECT LAST_INSERT_ID();» после того, как вручную вставьте новую «базу» в мою базу данных, она не вернет 0, я не понимаю.

РЕШЕНИЕ Это была проблема с драйвером, я меняю его и он работает.

+0

Не могли бы вы объяснить эту проблему? Я сталкиваюсь с тем же. – Nate

ответ

1

Похоже, что учение интерпретирует «базу» как свою собственную таблицу. Я думаю, что вы хотите достичь здесь, чтобы ваш базовый класс был отображен супер-классом.

Чтобы сделать это просто аннотацию как:

@MappedSuperclass

И тогда вы можете смело распространить его в других ваших лиц ..

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html#mapped-superclasses

+0

Я хочу, чтобы доктрина была промежуточной базой в качестве собственной таблицы, поэтому я использую «Наследование классов»: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping. html # class-table-inheritance, но это не удалось в INSERT – nlaille

+0

. А я вижу, посмотрите на «show create table» для этих Entities и посмотрите, можете ли вы использовать внешние ограничения ключей, и почему они будь там. Извините, я не мог больше помочь. –

+0

Хорошо, спасибо, в любом случае, но ограничения внешнего ключа выглядят нормально, но журнал странный, это похоже на то, что доктрина не знает последнюю вставку идентификатора. – nlaille

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

  • Нет связанных вопросов^_^