gpt4 book ai didi

php - 如何在同一个 Doctrine2 对象上正确插入或更新

转载 作者:行者123 更新时间:2023-12-05 08:43:18 26 4
gpt4 key购买 nike

我有这段代码:

$entity = $em->getRepository('AppBundle:Representative')->find($soqlObj1['records'][0]['Id']);

if ($entity === null) {
$entity = new Representative();
$em->persist($entity);
}

// we set the values from veeva
$entity->setVeevaRepId($soqlObj1['records'][0]['Id']);
$entity->setEmail($soqlObj1['records'][0]['Email']);
...

$em->flush();

这是实体代表的一部分:

class Representative
{
/**
* @ORM\Id()
* @ORM\Column(type="string", length=45, nullable=false, unique=true)
* @ORM\GeneratedValue()
* @Expose()
*/
protected $veeva_rep_id;

/**
* @var string
* @ORM\Column(type="string", length=45)
* @Expose()
*/
protected $display_name;

/**
* @var string
* @ORM\Column(type="string", length=255)
* @Expose()
*/
protected $avatar_url = 'https://pdone.s3.amazonaws.com/avatar/default_avatar.png';

/**
* @var string
* @ORM\Column(type="string", length=45)
* @Expose()
*/
protected $rep_type = "VEEVA";

/**
* @var string
* @ORM\Column(type="string", length=45)
* @Expose()
*/
protected $username;

/**
* @var string
* @ORM\Column(type="string", length=45)
* @Expose()
*/
protected $first;

/**
* @var string
* @ORM\Column(type="string", length=45)
* @Expose()
*/
protected $last;

/**
* @var string
* @ORM\Column(type="string", length=45, nullable=true)
* @Expose()
*/
protected $title;

/**
* @var string
* @ORM\Column(type="text", nullable=true)
*/
protected $bio;

/**
* @var string
* @ORM\Column(type="string", length=45, nullable=true)
* @Expose()
*/
protected $phone;

/**
* @var string
* @ORM\Column(type="string", length=45)
* @Expose()
*/
protected $email;

/**
* @var bool
* @ORM\Column(type="boolean")
* @Expose()
*/
protected $inactive = false;

/**
* @var \DateTime
* @ORM\Column(type="datetime", nullable=true)
* @Expose()
*/
protected $lastLoginAt;

/**
* @var \DateTime
* @ORM\Column(type="datetime")
* @Expose()
*/
protected $lastSyncAt;

/**
* @var Territory
* @ORM\ManyToOne(targetEntity="Territory")
* @ORM\JoinColumn(name="territories_id", referencedColumnName="veeva_territory_id")
* @Expose()
*/
protected $territory;

/**
* @var string
* @ORM\Column(type="string", nullable=true, length=150)
*/
protected $repTokenId;

...
}

还有一些其他列在数据库级别需要(在实体级别为 nullable = false),我的问题是:如果对象在数据库中不存在,它将根据我编写的代码或我编写的代码创建或更新需要将每个必填字段移动到条件中吗?实现这一目标的正确方法是什么?我正在尝试根据一个查询结果执行 INSERT|UPDATE

最佳答案

如果您从 db 检索对象,doctrine 本身知道下一个操作是更新还是插入:您不必担心任何事情

你的答案是有效的,但我会按如下方式修改它

$entity = $em->getRepository('AppBundle:Representative')->find($soqlObj1['records'][0]['Id']);

if ($entity === null) {
$entity = new Representative();
}

// we set the values from veeva
$entity->setVeevaRepId($soqlObj1['records'][0]['Id']);
$entity->setEmail($soqlObj1['records'][0]['Email']);

$em->persist($entity);
$em->flush();

正如我告诉过你的,你不必担心插入或更新,doctrine 会为你做这件事。但是,如果仅当对象是新对象或从数据库中获取对象时才需要设置某些值,只需在 $entity === null 控件下添加适当的代码

关于php - 如何在同一个 Doctrine2 对象上正确插入或更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31116297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com