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这可能是条令的神奇方法之一。你可能应该对你的标签属性有一个独特的约束。除此之外,我看不出这有什么问题