在我的项目中,我有很多many-to-many
实体。这种many-to-many
关系有属性,所以我决定A 1:n B n:1 C
像这篇文章中描述的那样把它们分开。
所以我的简化类结构如下所示。到目前为止一切顺利,但是当我运行我的控制器(也在下面列出)来插入值时,我遇到了一个异常:
使用参数 {...} 执行“INSERT INTO b (...) VALUES (...)”时发生异常
SQLSTATE [23000]:违反完整性约束:1048 列 'class_a_id' 不能为空
我究竟做错了什么?
A级
<?
/**
* @ORM\Entity
* @ORM\Table(name="a")
*/
class ClassA {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
**/
protected $id;
/** OTHER FIELDS **/
/**
* @ORM\OneToMany(targetEntity="ClassB", mappedBy="class_a", cascade={"persist", "remove"})
**/
protected $class_b;
}
B类
/**
* @ORM\Entity
* @ORM\Table(name="b")
*/
class ClassB {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
**/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="ClassC", inversedBy="class_b")
* @ORM\JoinColumn(name="class_c_id", referencedColumnName="id", nullable=false)
**/
protected $class_c;
/**
* @ORM\ManyToOne(targetEntity="ClassA", inversedBy="class_b")
* @ORM\JoinColumn(name="class_a_id", referencedColumnName="id", nullable=false)
**/
protected $class_a;
/** OTHER FIELDS **/
}
C类
/**
* @ORM\Entity
* @ORM\Table(name="c")
*/
class ClassC {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/** OTHER FIELDS **/
/**
* @ORM\OneToMany(targetEntity="ClassB", mappedBy="class_c")
**/
protected $class_b;
}
控制器
$em = $this->getDoctrine()->getEntityManager();
$a = new ClassA();
$a->setXXX() //Setting some other fields
foreach(...) {
$b = new ClassB();
$b->setClass_C(...); //found by doctrine out of database and set into classB
$b->setXXX() //Setting some other fields
$a->addClass-B($b); //added ClassB into ClassA
}
$em->persist($a);
$em->flush();