我需要在一个带有symfony(sonata(的实体中进行计算,如下所示:我在我的实体中有3个带有条令的标签,我需要将结果保存在数据库中:$calcul=$a+$b
这是我的实体
class National
{
/**
* @var int
*/
private $id;
/**
* @var string(unique=true)
*/
private $selection;
/**
* @var int
*/
private $a;
/**
* @var int
*/
private $b;
/**
* @var string
*/
private $total;
这是我的经典设置和获取
/**
* Set a
*
* @param string $a
*
* @return Events
*/
public function setA($a)
{
$this->a = $a;
return $this;
}
/**
* Get a
*
* @return string
*/
public function getA()
{
return $this->a;
}
/**
* Set b
*
* @param string $b
* @return Events
*/
public function setB($b)
{
$this->b = $b;
return $this;
}
所以问题是如何创建构造函数???
在数据库中保存$calcul中的结果
(例如:如果我在标签$a中写5,在标签$b中写5-我需要在标签$calcul中直接写10…(
推荐
我不建议做将计算数据持久化到数据库这样的事情(3FN解释(。
通常情况下,您不希望存储由两个或多个其他字段产生的结果的字段,就好像您需要更新其中一个原始字段一样,这也需要您每次重新计算并重新存储结果,每次需要多进行几次操作。
此外,如果由于某种原因,calcul必须更改,则必须更新使用以前calcul完成的所有数据。这将变得非常难以管理。
如果您需要检索两个或多个字段的结果,应该通过在需要的地方调用函数来执行
技术
当然,如果你仍然想这样做,或者真的需要它,那么做的方法是:
class National {
... // Your fields, getters and setters
public function calculTotal() {
$this->total = $this->a + $this->b;
return $this;
}
}
在您的控制器或服务中
// Fetch you National entity from repository
// Perform the calcul
$national->calculTotal()
// Persist the national entity with the new 'total' fields added to it
$this->entityManager->perist($national);
$this->entityManager->flush();