【发布时间】:2017-01-24 00:25:03
【问题描述】:
我使用 Symfony 3。
我有一个可以创建和编辑的实体(书)。所以我创建了两个动作和表单来做到这一点。但是,我想保存此更改的历史记录。
我想出了一个解决方案。 BaseBook 继承的两个实体,Book 和 SubBook。 SubBook 是 Book 的所有编辑历史,由字段“parent”链接。
public function editAction(Request $request, ...)
{
$book = ...
$form = $this->createForm(BookType::class, $book);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$subbook = new SubBook($book);
$em = $this->getDoctrine()->getManager();
$em->persist($subbook);
$em->flush();
// ...
}
// ...
}
AppBundle/实体/书
class Book extends BaseBook {
// ...
}
AppBundle/实体/子书
class SubBook extends BaseBook {
// ...
public function __construct($book)
{
parent::__construct();
// ...
$this->parent = $book;
}
}
AppBundle/Model/BaseBook
abstract class BaseBook
{
// ...
}
但我的问题是,当我提交编辑表单时,我的 Book ($book) 在我执行 $em->flush(); 时会自动保留,因此即使我不执行 $em->persist($book);,它也会更新。
那么,你有什么想法吗?还是解决这个错误?
谢谢!
【问题讨论】:
-
$em->detach($book);
-
@goto 谢谢,但提问者没有回应,没有解释的单行字也不是什么答案。随意写下你自己的答案,也许添加一些细节。
-
@Cerad meta.stackoverflow.com/questions/266954/one-line-answers - 编辑:哎呀,没看到你是 25k 用户 xD
标签: php forms doctrine symfony