我想要建立一对多的关系
有课
class Interview {
/**
* @OneToMany(targetEntity="Question", mappedBy="question")
*/
private $questions;
public function __construct() {
$this->questions = new ArrayCollection();
}
public function __toString() {
return $this->id;
}
/**
* @return Collection|Question[]
*/
public function getQuestions() {
return $this->questions;
}
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
......
}
另一个
class Question {
/**
* @ManyToOne(targetEntity="Interview", inversedBy="interview")
* @JoinColumn(name="interview_id", referencedColumnName="id")
*/
private $interview;
public function getInterview() {
return $this->interview;
}
public function setInterview(Interview $interview) {
$this->interview = $interview;
return $this;
}
/**
* @ORM\Column(type="integer")
* @ORM\Id
*/
private $interview_id;
......
}
和所有这些的控制器
if ($form->isSubmitted() && $form->isValid()) {
$interview = new Interview();
$question = new Question();
$em->persist($interview);
$question->setInterview($interview);
$question->setTitle($request->get('title'));
$em->persist($question);
$em->flush();
return $this->redirectToRoute('homepage');
}
我收到错误:
AppBundle \ Entity \ Question类型的实体缺少已分配的ID 字段'interview_id'。这个标识符生成策略 实体要求之前填充ID字段 调用EntityManager#persist()。如果要自动生成 您需要调整元数据映射 相应
不明白问题是什么以及如何解决。
答案 0 :(得分:0)
再次强制从数据库加载对象,而不是从身份映射中提供对象。您可以在$em->clear();
之后致电$em->persist($interview);
,即
$interview = new Interview();
$em->persist($interview);
$em->clear();
答案 1 :(得分:0)
看起来您的项目配置在学说映射部分中有错误。
如果您想要自动生成的标识符,则需要 相应地调整元数据映射。
尝试查看完整的doctrine config并使用
进行一些操作auto_mapping:false 以示例或其他方式为真......
同样去this,也许它会有用。
答案 2 :(得分:0)
我确定,为时已晚,但也许其他人会收到此错误:-D 当您的链接实体(此处为Interview实体)为null时,会出现此错误。
当然,您已经实例化了一个Interview的新实例。但是,由于该实体仅包含一个字段(id),因此在持久化该实体之前,其id等于NULL。由于没有其他字段,因此主义认为该实体为NULL。您可以通过在将此实体链接到另一个实体之前调用flush()来解决该问题