Mysql Symfony更新实体值+;1.
我想在更新现有数据库条目时求和或相加一个 由于我将不得不与MagicCalls合作,我只是想知道如何处理这个问题 在原始sql中,我会这样做: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 *
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来写回这些值。