У меня есть следующий код в моем контроллере:как создать объект без дублей
foreach ($image->tags as $tag) {
$existingTag = $em->getRepository('AppMainBundle:InstagramTag')->findOneByTag($tag);
if ($existingTag) {
ladybug_dump('existing tag');
} else {
ladybug_dump('non existing tag');
$instagramTag = new InstagramTag();
$instagramTag->setTag($tag);
$em->persist($instagramTag);
}
}
Вот моя сущность:
/**
* @ORM\Entity
* @ORM\Table(name="app_instagram_tag")
* @ORM\HasLifecycleCallbacks()
*/
class InstagramTag
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @ORM\Column(name="tag", type="string", nullable=true)
*/
private $tag;
/**
*
* @ORM\OneToMany(targetEntity="App\MainBundle\Entity\InstagramPictureTag", mappedBy="tag")
*/
private $picturetag;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Get tag
*
* @return string
*/
public function getTag()
{
return $this->tag;
}
/**
* Set tag
*
* @param string $tag
* @return InstagramTag
*/
public function setTag($tag)
{
$this->tag = $tag;
return $this;
}
}
Сначала я начал с пустым столом под названием app_instagram_tag. И $ image-> tags - это массив строк, например ["abc", "test", "etc"]
. Как возможно, что, когда я начал использовать пустую таблицу, он все время печатает existing tag
?
Показать код вашего метода репо 'findOneByTag' –
@Bram Это, вероятно, один из магических методов Доктрине в – Phil
Вы, вероятно, следует иметь уникальное ограничение на ваше свойство 'tag'. Кроме этого, не вижу ничего плохого в этом – Phil