Symfony更新实体值+ 1

时间:2015-09-15 12:04:45

标签: mysql symfony sum add

我想在更新现有数据库条目时汇总或添加一个。

由于我必须使用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);
 }

那么如何通过计算更新来处理更新?我错过了一些我猜的东西

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调用这个事件发生的时间