我想在更新现有数据库条目时汇总或添加一个。
由于我必须使用MagicCalls,我只是想知道如何处理这个问题。
在原始sql中,我会这样做:
UPDATE table SET value= value + 1 WHERE ....
但在这种情况下,我完全不知道如何解决这个问题。
我的代码如下:
实体:
class Properties
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Sport", type="string", length=11, nullable=true)
*/
private $sport;
/**
* @var string
*
* @ORM\Column(name="Entertainment", type="string", length=11, nullable=true)
*/
private $entertainment;
/**
* @var string
*
* @ORM\Column(name="Wellness", type="string", length=11, nullable=true)
*/
private $wellness;
现在,我按
获取这些列名$metadata = $em->getClassMetadata($className);
$columnNames=$metadata->getColumnNames();
我接收了一个数组,我可以预先为每个数组添加值,我将不得不使用存取器写回来:
$properties= new Properties();
$accessor = PropertyAccess::createPropertyAccessorBuilder()
->enableMagicCall()
->getPropertyAccessor();
foreach($columnNames as $merkmale) {
$accessor->setValue($properties, $merkmale, 1);
}
那么如何通过计算更新来处理更新?我错过了一些我猜的东西
答案 0 :(得分:2)
为什么不使用Lifecycle callbacks?这样,您可以选择最适合您情况的doctrine event,并在一种方法中增加所需的所有值。
ExportSum =
0.5822 0.3291 0.1477 0.0380 0.0000 0.0338 0.1392 0.3164 0.5653
您需要做的就是使用/**
* @ORM\Entity()
* @ORM\HasLifecycleCallbacks()
*/
class Properties
{
/**
* @var string
*
* @ORM\Column(name="Sport", type="string", length=11, nullable=true)
*/
private $sport;
/**
* @var string
*
* @ORM\Column(name="Entertainment", type="string", length=11, nullable=true)
*/
private $entertainment;
/**
* @var string
*
* @ORM\Column(name="Wellness", type="string", length=11, nullable=true)
*/
private $wellness;
/**
* @ORM\PrePersist
*/
public function incrementValues()
{
$this->entertainment = 1; //you don't need any magic any more
$this->wellness = $this->wellness + 5; //you can access your entity values directly
}
}
注释您的实体并添加您需要使用给定事件进行注释的方法,例如@ORM\HasLifecycleCallbacks()
,此方法将由@ORM\PrePersist
调用这个事件发生的时间