使用Symfony2,我需要在使用$ form-> bind()之前保存一个实体,以便在刷新之前比较新旧实体。
我尝试了一些功能:
$command = $repository->findCommandProductsByCommand( $id );
$old_command = clone $command;
// OR $old_command = $command;
$form = $this->createForm(new EditCommandType(), $command);
if( $request->getMethod() == 'POST' )
{
$form->bind($request);
if ( $form->isValid() )
{
我试图像这样保存一小部分实体:
$old_command = $command->getCommandProducts();
但是当我尝试使用这些方法之一访问$ old_command的数据时,我只能从表单访问该对象的较新值而不是较旧的值。
$ form-> bind($ request)是主要问题,但我没有找到描述exacly bind()的文档。
祝你好运
解决我的问题(感谢zizoujab)
$command_entries = new ArrayCollection();
foreach ($command->getCommandproducts() as $entry) {
$command_entries[] = clone $entry;
}
现在我的ArrayCollection $ command_entries没有链接到上一个实体。
答案 0 :(得分:3)
来自克隆手册:
当克隆一个对象时,PHP 5将执行所有的浅层副本 对象的 属性。任何引用其他变量的属性都将保留引用。
我假设getCommandProducts()
返回ArrayCollection
,因此您将始终获得新列表。
你也必须克隆列表的元素。
这里有完整的解释和解决方案的示例: Symfony2/Doctrine: How to re-save an entity with a OneToMany as a cascading new row