Php Symfony/doctor类表继承和外键作为主键
我目前正在使用Symfony 2.5(和Doctrine 2.4.2)设计一个web应用程序,该应用程序必须灵活,以便轻松插入新的模块/捆绑包 所以我有一个实体(比如A),它与抽象类(B和C)有两个一对一的关联。未来的模块将实现两个抽象类中的一个。由于关联是一对一的,所以我将它们设置为抽象类的ID,以便在我们知道 下面是代码的样子: A类:Php Symfony/doctor类表继承和外键作为主键,php,symfony,inheritance,doctrine-orm,shared-primary-key,Php,Symfony,Inheritance,Doctrine Orm,Shared Primary Key,我目前正在使用Symfony 2.5(和Doctrine 2.4.2)设计一个web应用程序,该应用程序必须灵活,以便轻松插入新的模块/捆绑包 所以我有一个实体(比如A),它与抽象类(B和C)有两个一对一的关联。未来的模块将实现两个抽象类中的一个。由于关联是一对一的,所以我将它们设置为抽象类的ID,以便在我们知道 下面是代码的样子: A类: <?php namespace Me\TestBundle\Entity; use Doctrine\ORM\Mapping as ORM; /
<?php
namespace Me\TestBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table()
* @ORM\Entity
*/
class A
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="B", cascade={"all"}, mappedBy="a")
* @ORM\JoinColumn(name="id", referencedColumnName="a_id")
*/
private $b;
/**
* @ORM\OneToOne(targetEntity="C", cascade={"all"}, mappedBy="a")
* @ORM\JoinColumn(name="id", referencedColumnName="a_id")
*/
private $c;
}
首先,命令php应用程序/控制台原则:schema:validate
检查当前模式的有效性。当前模式是上次调用命令php应用程序/控制台条令:schema:update--force时生成的模式
另一方面,命令php-app/console-doctor:schema:update--dump-sql
不会执行对模式的实际更新,尽管它可能会发现一些错误,但其他一些错误不会出现
我不理解B类。这个(抽象)类的身份是一种一刀切的关系?无论如何,如果不添加inheritanceType定义,Doctine将忽略@ORD\Id。添加此inheritanceType定义时,原则将使属性“a”成为B的主键。它还将创建另一个名为“a_id”的属性,该属性将作为未来子类(B的扩展)的外键。但是…关系不是遗传的
希望这有助于
<?php
namespace Me\TestBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table()
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
*/
abstract class B
{
/**
* @ORM\Id
* @ORM\OneToOne(targetEntity="A", inversedBy="b")
* @ORM\JoinColumn(name="a_id", referencedColumnName="id")
*/
private $a;
}