Php 如何创建没有重复项的实体

Php 如何创建没有重复项的实体,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,我的控制器中有以下代码: foreach ($image->tags as $tag) { $existingTag = $em->getRepository('AppMainBundle:InstagramTag')->findOneByTag($tag); if ($existingTag) { ladybug_dump('existing tag'); } el

我的控制器中有以下代码:

 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,等等]。当我开始使用空表时,它怎么可能一直打印现有标记?

@adit,理论上,$existingTag应该为“NULL”。尝试var_dump$existingTag并查看该变量中包含哪些值。此外,如果我是你,我会将代码更改为:

<?php
...
$repository = $em->getRepository('AppMainBundle:InstagramTag');

foreach ($image->tags as $tag) {
    $existingTag = $repository->findOneByTag($tag);

    if ($existingTag) {

        var_dump($existingTag); // this line is just to find out why your logic is falling in here when should go to the else. Maybe change the logic for if ($existingTag === NULL) {
        ladybug_dump('existing tag');

        } else {
                ladybug_dump('non existing tag');
                $instagramTag = new InstagramTag();
                $instagramTag->setTag($tag);
                $em->persist($instagramTag);
        }                     
  }
我希望它有帮助。

尝试使用

 if(isset($existingTag)) {
 }
而不是

if ($existingTag)

显示您的回购方法的代码findOneByTag@Bram这可能是条令的神奇方法之一。你可能应该对你的标签属性有一个独特的约束。除此之外,我看不出这有什么问题