我编辑了一些错误和细节......
好吧,我一直在尝试使用Product作为父级,将Film和Book作为子级创建继承。在线检查和官方文档没有解决我的问题,因为示例很差且不完整。 (http://www.doctrine-project.org/docs/orm/2.0/en/reference/inheritance-mapping.html#class-table-inheritance)。
我不确定我是否做得对,现在我只是不知道如何生成,操纵和持久化继承的对象。
父类
<?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;
}
doctrine:schema:update --force生成2个表: ProductE ...(id主键,disc dunno如何工作,其余字段) 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()时,产品的ID是自动生成的。所以当我使用persist时不会生成...
答案 0 :(得分:4)
继承类中不能有两个主键,只是因为它允许您持久保存基础对象类。你可以找到一个例子here它可以正常工作。除了使用更复杂的查询之外,还应该过滤特定的实例,但一切皆有可能