2013-09-25 4 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-> tags - это массив строк, например ["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) 
Смежные вопросы