0

大家好,我已经在 Page CRUD 中集成了 stofdoctrinebundle 和 vichuploaderbundle 的 slug 和图像上传。

这是实体:

namespace George\PageBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use George\UserBundle\Entity\User;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**
 * Page
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="George\PageBundle\Entity\PageRepository")
 * @Vich\Uploadable
 */
class Page
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="title", type="text")
 */
private $title;

/**
 * @var string
 *
 * @ORM\Column(name="content", type="text")
 */
private $content;

/**
 * @var boolean
 *
 * @ORM\Column(name="visible", type="boolean")
 */
private $visible;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="created", type="datetime")
 */
private $created;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="modefied", type="datetime")
 */
private $modefied;

/**
 * @var string
 *
 * @ORM\Column(name="description", type="string", length=255)
 */
private $description;

/**
 * @var string
 *
 * @ORM\Column(name="keywords", type="string", length=255)
 */
private $keywords;

/**
 * @ORM\ManyToOne(targetEntity="George\UserBundle\Entity\User",  inversedBy="pages")
 * @ORM\JoinColumn(onDelete="CASCADE")
 */
private $owner;

//@ORM\Column(length=128, unique=true)
/**
 * @Gedmo\Slug(fields={"title"})
 * @ORM\Column(length=128, unique=true)
 */
private $slug;

/**
 * Get id
 *
 * @return integer
 */
public function getId()
{
    return $this->id;
}

/**
 * Set title
 *
 * @param string $title
 *
 * @return Page
 */
public function setTitle($title)
{
    $this->title = $title;

    return $this;
}

/**
 * Get title
 *
 * @return string
 */
public function getTitle()
{
    return $this->title;
}

/**
 * Set content
 *
 * @param string $content
 *
 * @return Page
 */
public function setContent($content)
{
    $this->content = $content;

    return $this;
}

/**
 * Get content
 *
 * @return string
 */
public function getContent()
{
    return $this->content;
}

/**
 * Set visible
 *
 * @param boolean $visible
 *
 * @return Page
 */
public function setVisible($visible)
{
    $this->visible = $visible;

    return $this;
}

/**
 * Get visible
 *
 * @return boolean
 */
public function getVisible()
{
    return $this->visible;
}

/**
 * Set created
 *
 * @param \DateTime $created
 *
 * @return Page
 */
public function setCreated($created)
{
    $this->created = $created;

    return $this;
}

/**
 * Get created
 *
 * @return \DateTime
 */
public function getCreated()
{
    return $this->created;
}

/**
 * Set modefied
 *
 * @param \DateTime $modefied
 *
 * @return Page
 */
public function setModefied($modefied)
{
    $this->modefied = $modefied;

    return $this;
}

/**
 * Get modefied
 *
 * @return \DateTime
 */
public function getModefied()
{
    return $this->modefied;
}

/**
 * Set description
 *
 * @param string $description
 *
 * @return Page
 */
public function setDescription($description)
{
    $this->description = $description;

    return $this;
}

/**
 * Get description
 *
 * @return string
 */
public function getDescription()
{
    return $this->description;
}

/**
 * Set keywords
 *
 * @param string $keywords
 *
 * @return Page
 */
public function setKeywords($keywords)
{
    $this->keywords = $keywords;

    return $this;
}

/**
 * Get keywords
 *
 * @return string
 */
public function getKeywords()
{
    return $this->keywords;
}

/**
 * @return mixed
 */
public function getOwner()
{
    return $this->owner;
}

/**
 * @param mixed $owner
 */
public function setOwner(User $owner)
{
    $this->owner = $owner;
}

public function getSlug()
{
    return $this->slug;
}

// ..... other fields


/**
 * NOTE: This is not a mapped field of entity metadata, just a simple property.
 *
 * @Vich\UploadableField(mapping="product_image", fileNameProperty="imageName")
 *
 * @var File
 */
private $imageFile;

/**
 * @ORM\Column(type="string", length=255)
 *
 * @var string
 */
private $imageName;

/**
 * @ORM\Column(type="datetime")
 *
 * @var \DateTime
 */
private $updatedAt;

/**
 * If manually uploading a file (i.e. not using Symfony Form) ensure an instance
 * of 'UploadedFile' is injected into this setter to trigger the  update. If this
 * bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
 * must be able to accept an instance of 'File' as the bundle will inject one here
 * during Doctrine hydration.
 *
 * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image
 */
public function setImageFile(File $image = null)
{
    $this->imageFile = $image;

    if ($image) {
        // It is required that at least one field changes if you are using doctrine
        // otherwise the event listeners won't be called and the file is lost
        $this->updatedAt = new \DateTime('now');
    }
}

/**
 * @return File
 */
public function getImageFile()
{
    return $this->imageFile;
}

/**
 * @param string $imageName
 */
public function setImageName($imageName)
{
    $this->imageName = $imageName;
}

/**
 * @return string
 */
public function getImageName()
{
    return $this->imageName;
}
}

当我尝试使用学说 migrationbundle 进行迁移时,它会抛出错误“语法错误或访问冲突:1061 Duplicate key name ...”

在数据库中,我已经有了这个唯一索引:

在此处输入图像描述

我不明白为什么迁移要添加它已经存在。

4

1 回答 1

0

创建迁移时请记住,当您生成两个或更多迁移时,您将通过其中两个迁移,并且当迁移的更改之一是重复的时,您需要将其从迁移中删除以继续前进。

于 2015-12-04T07:59:43.080 回答