2013-09-25 48 views
1

實體我有我的控制器下面的代碼:如何創建無重複

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->標籤是一串字符串,例如["abc", "test", "etc"]。當我開始使用空表時,它總是打印existing tag

+1

顯示您的回購方法'findOneByTag' –

+0

@Bram這可能主義的神奇方法之一 – Phil

+0

你或許應該有一個唯一約束的代碼你的'tag'屬性。除此之外,看不出有什麼問題 – Phil

回答

0

@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); 
     }      
    } 

我希望它有幫助。

-1

嘗試使用

if(isset($existingTag)) { 
} 

,而不是

if ($existingTag)