gpt4 book ai didi

php - 如何在使用 Symfony2 保存之前设置或更改实体值

转载 作者:行者123 更新时间:2023-12-02 06:20:00 26 4
gpt4 key购买 nike

我想更改实体值,以防它是例如 NULL。不幸的是,我的代码导致异常 - 尽管在数据库中创建了“翻译”记录并且 id 由 getId 方法正确返回,但似乎没有设置 id。

很简单的代码,为什么不起作用?

public function createAction(Request $request)
{
$entity = new Word();
$form = $this->createForm(new WordType(), $entity);
$form->bind($request);


if ($form->isValid()) {

$em = $this->getDoctrine()->getManager();

//works fine - database record is created
if($entity->getIdTranslation() == NULL){
$translation = new Translation();
$em->persist($translation);
$em->flush();
$entity->setIdTranslation($translation->getId());
}


$em->persist($entity);
//throws exception - Integrity constraint violation: 1048 Column 'id_translation' cannot be null
$em->flush();

return $this->redirect($this->generateUrl('admin_word_show', array('id' => $entity->getId())));
}

return array(
'entity' => $entity,
'form' => $form->createView(),
);
}

编辑:添加了我的模型和映射信息的一部分:

part of model for overwiev

相关词映射:

 /**
* @var integer $id_language
*
* @ORM\Column(name="id_language", type="integer")
*/
private $id_language;
/**
*@ORM\ManyToOne(targetEntity="Language", inversedBy="words")
*@ORM\JoinColumn (name="id_language", referencedColumnName="id")
*/
protected $language;

/**
*
* @ORM\ManyToOne(targetEntity="Translation", inversedBy="words")
* @ORM\JoinColumn(name="id_translation", referencedColumnName="id")
*/
protected $translation;

和翻译:

class Translation
{

public function __construct() {
$this->words = new ArrayCollection();
}
/**
* @ORM\PrePersist()
*/
public function prePersist() {
$this->created_date = new \DateTime();
}
/**
*
* @ORM\OneToMany(targetEntity="Word" ,mappedBy="translation")
*/
protected $words;

另外附注: 我已经使用数据库建模软件(工作台)而不是 Symfony 控制台工具创建了我的数据库模型,现在我正在尝试设置实体以反射(reflect)数据库模型。我不确定它的方法是否正确——也许我的模型太复杂而无法与 Doctrine 一起正常工作?

最佳答案

生命周期回调

有时,您需要在插入、更新或删除实体之前或之后执行操作。这些类型的操作称为“生命周期”回调,因为它们是您需要在实体生命周期的不同阶段执行的回调方法(例如,实体被插入、更新、删除、等)。

生命周期回调应该是涉及在实体内部转换数据的简单方法(例如,设置创建/更新字段,生成 slug 值)

如果您需要做一些更繁重的工作 - 例如执行日志记录或发送电子邮件 - 您应该注册一个外部 类作为事件监听器 或订阅者,并允许它访问您需要的任何资源。更多信息,请参阅如何注册 a Event Listeners and Subscribers.

关于php - 如何在使用 Symfony2 保存之前设置或更改实体值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12736936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com