Mysql Symfony更新实体值+;1.

Mysql Symfony更新实体值+;1.,mysql,symfony,sum,add,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 *

我想在更新现有数据库条目时求和或相加一个

由于我将不得不与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();
我接收到一个数组,我可以对其进行foreach并向每个数组添加值,我必须使用访问器将这些值写回:

$properties= new Properties();
$accessor = PropertyAccess::createPropertyAccessorBuilder()
                        ->enableMagicCall()
                        ->getPropertyAccessor();


 foreach($columnNames as $merkmale) {
     $accessor->setValue($properties, $merkmale, 1);
 }
那么,我如何通过计算一个更新来处理更新呢?我想我错过了一些东西,你为什么不用呢?这样,您可以选择最适合您的情况,并在一个方法中增加您需要的所有值

/**
* @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\haslifecycellbacks()
注释你的实体,并添加你还需要用给定事件注释的方法,比如
@ORM\PrePersist
,每次发生此事件时,
原则将调用此方法。。。我还没有看到这个存在。但如果我没有误解,它将始终更新所有给定字段。在我的例子中,可能只有特殊字段需要更新。例如,输入数组仅包含必须更新的值“sport”。不,条令将始终调用带有事件注释的方法-您将更新哪些字段只是您将在该方法中输入的逻辑问题对不起。我想我不明白(例如,如果有一个数组带有['sport','wellness',],我将使用MagicCall更新这两个字段,那么该方法应该是什么样子的?现在我不明白。您希望增加多少(+1)你不能增加数组。什么是MagicCall?我得到数组中实体的值。因此我需要使用MagicCall,例如PropertyAccessor来写回这些值。