Я отредактировал некоторые ошибки и детали ...
Ну, я пытался создать наследство, используя Product в качестве родителя и Film and Book в качестве потомков. Проверка онлайн и официальной документации не решила мою проблему, потому что примеры скудны и неполны. (http://www.doctrine -project.org / документы / ОРМ / 2.0 / о / ссылки / наследования mapping.html # класс таблица наследование).
Я не уверен, правильно ли я это сделал, и теперь я просто не знаю, как генерировать, манипулировать и сохранять унаследованные объекты.
Родительский класс
<?php
namespace Paf\MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table()
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({ "film" = "FilmE2" , "book" = "BookE2" })
*/
class ProductEjemplo2
{
/**
* @var integer $id
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
//More fields, Name, Description ...
}
Детский класс
<?php
//Paf\MyBundle\Entity\FilmE2
namespace Paf\MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table()
* @ORM\Entity
*/
class FilmE2 extends ProductEjemplo2
{
/**
* @var integer $id
* @ORM\Id
* @ORM\Column(name="id", type="integer")
*/
protected $id;
}
доктрина: схема: обновление --force генерирует 2 таблицы:
ProductE ... (идентификатор первичного ключа, диск не знаю, как работает, остальные поля)
FilmE2 (первичный ключ id, остальные поля)
public function create2Action()
{
$product1 = new ProductEjemplo2();
$product1->setName('New Film 1'); //and more fields
//here $product1 ID is null.(autogenerated but yet without value)
$em->persist($product1); //error, non-object....
$em->flush();
$film = new FilmE2();
$film->setName('New Film 1'); //and more fields
$film->setDirector('dir1');
$film->setId(1);
$em->persist($film); //error, non-object....
$em->flush();
//In both cases happens the same.
Это не работает, это совершенно очевидно, потому что говорит ошибка "необъект" не может быть сохранена ... но если я пытаюсь с новым Filme2 () происходит то же самое ... что идентификатор продукта генерируется автоматически при использовании flush (). Так не генерируется, когда я использую persist ...