如何在 symfony2 中持久化之前设置列值?

Posted

技术标签:

【中文标题】如何在 symfony2 中持久化之前设置列值?【英文标题】:how to set column value before persist in symfony2? 【发布时间】:2015-07-09 17:16:20 【问题描述】:

假设我必须将列值公式设置为 1。那么在坚持之前我该怎么做。坚持后我应该在数据库中得到 1。

 $f=1;
 $product->setFormula($f);
 $em->persist($product); 

如果我使用上面的行会报错

类型“Nimo\MrmdBundle\Entity\Product”的预期值 关联字段“Nimo\MrmdBundle\Entity\Product#$basedOn”,得到 改为“整数”

这里是实体代码

/**
 * @ORM\ManyToOne(targetEntity="Product")
 * @ORM\JoinColumn(name="formula", referencedColumnName="someothercolumn",nullable=true)
 **/
private $formula = null;

【问题讨论】:

显示你的实体类。 我在上面添加了实体代码 看到这个***.com/a/30373523/4841794 你需要持久化一个$formula 类型的实体而不是持久化一个整数。 我没有公式类型的实体 那你指的是什么? someothercolumn 是什么? 【参考方案1】:

您必须先更正您的实体定义,但这是您需要在控制器中执行的操作。在您确保正确定义实体之前,这将不会起作用。 (我不能,因为我不知道你的实体定义)

$f=1;
$em = $this->container->get('doctrine.orm.entity_manager');
$repo = $em->getRepository('AppBundle:Formula'); //This should be your referred entity
//You can also do findOneByName below
$formula= $repo->findOneById($id); //This should be the primary key of the referred entity NOT 1
$formula->setFormula($f);
$em->persist($formula);

【讨论】:

【参考方案2】:

当您在两个实体之间创建关系时,您不能传递单个值或包含单个值的变量。

实体作用于对象。因此,尝试传递某个实体的对象或创建一个具有某些值的对象,它将起作用。我在传递单个值时也面临同样的错误。只需传递一个实体关系注释的对象,就会拾取其他实体的连接列。

【讨论】:

以上是关于如何在 symfony2 中持久化之前设置列值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Symfony2 中单向持久化一对一实体

Symfony2/Doctrine:如何从实体类中持久化一个实体?

在持久化到实体之前转换从表单收集的数据

Symfony2:获取持久化对象的 id

如何在access vba中的记录集中设置列值

如何在 Symfony2 中使用 setter 设置表单字段值