好的,我有一个用户实体如下
<?php
class User
{
/**
* @var integer
* @Id
* @Column(type="integer")
* @GeneratedValue
*/
protected $id;
/**
* @var \Application\Entity\Url[]
* @OneToMany(targetEntity="Url", mappedBy="user", cascade={"persist", "remove"})
*/
protected $urls;
public function __construct()
{
$this->urls = new \Doctrine\Common\Collections\ArrayCollection();
}
public function addUrl($url)
{
// This is where I have a problem
}
}
现在,我想要做的是检查用户是否已经$url
在$urls
ArrayCollection
持久化$url
.
现在我发现的一些例子说我们应该做类似的事情
if (!$this->getUrls()->contains($url)) {
// add url
}
但这不起作用,因为它比较了元素值。由于$url
还没id
有价值,这将始终失败并被$url
复制。
因此,如果有人能解释我如何向 ArrayCollection 添加一个元素而不持久化它并避免重复,我将非常感激?
编辑
我已经设法通过
$p = function ($key, $element) use ($url)
{
if ($element->getUrlHash() == $url->getUrlHash()) {
return true;
} else {
return false;
}
};
但这不是仍然加载所有网址然后执行检查吗?我不认为这是有效的,因为每个用户可能有数千个 url。