我正在使用Symfony 3,Doctrine 2.5构建一个简单的Web服务,并在简化结构中坚持下面描述的ORM关系。
我有一个Action实体,其中包含许多具有ManyToOne关系的动作......
class Action
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="\AppBundle\Entity\Status")
* @ORM\JoinColumn(referencedColumnName="code", nullable=false)
*/
private $status;
和具有一些状态的状态实体。
class Status
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(type="integer", unique=true)
*/
private $code;
我无法正确设置referencedColumnName =" code" Action实体的列(不是' Id'像往常一样)。
以这种方式配置repo在持续时刻抛出wxception" 注意:未定义索引:代码&#34 ;;
我猜它是mapBy或inversedBy注释参数......但是不能弄清楚"如何"。
答案 0 :(得分:2)
不幸的是,Doctrine(reference)不支持它。
您可以像这样编辑您的状态实体(确保在保留之前设置代码):
class Status
{
/**
* @ORM\Column(name="code", type="integer", unique=true)
* @ORM\Id
*/
private $code;
}
如果您需要自动增量字段,可以查看this答案以获取可能的解决方案。
答案 1 :(得分:0)
以为我想添加您仍然可以通过将实体本身用作联接表来使用非主键。这将起作用,但是您仍然需要正确设置关系密钥。
示例:
2>nul
好处是它可以很好地解决。
请记住以下几点: