Symfony 2:SQLSTATE [23000]:完整性约束违规:1062重复条目

时间:2015-08-26 13:26:20

标签: php mysql symfony doctrine-orm

所以我使用的是Symfony 2,有时在调用updateAction时,我从symfony中获得了以下500错误:

  

“执行'INSERT INTO topic_sources时发生异常   (平台,作者,关键字,rss_feeds,topic_id)VALUES(?,?,?,?,   ?)'与params [“facebook”,“153213781413350”,null,   “https://www.facebook.com/HuffPostWomen”,4641]:SQLSTATE [23000]:   违反完整性约束:1062重复条目'4641-facebook'   关键'PRIMARY'“......等等

我理解这个问题与它试图插入已存在的行有关,但我不明白为什么会发生这种情况......我的印象是symfony和Doctrine管理这个。这是我的updateAction的代码:

public function updateAction($id) {
        $topic = $this->getTopic($id);

        if (!$topic) {
            throw $this->createNotFoundException('No topic found for id ' . $id);
    }

    $originalTopicSources = new ArrayCollection();

    // Grab all the topic sources on the page 
    foreach ($topic->getTopicSources() as $topicSource) {
        $originalTopicSources->add($topicSource);
    }

    // Get all the Request Data
    $request = $this->getRequest();
    $requestData = $request->request->all();
    $imageData = $request->get("topic-image");

    $em = $this->getDoctrine()
            ->getManager();


    // Bind the form for validation
    $editTopicForm = $this->createForm(new TopicType($em), $topic);
    $editTopicForm->bind($request);


    if ($editTopicForm->isValid()) {
        // Grab image and decode
        if ($imageData) {
            list($type, $imageData) = explode(';', $imageData);
            list(, $imageData) = explode(',', $imageData);
            $data = base64_decode($imageData);
            $filename = "$id." . explode("/", $type)[1];

            $topic->setImage($filename);
            file_put_contents($this->get('kernel')->getRootDir() . "/../web/uploads/topics/$filename", $data);
        }

        set_time_limit(10);

        // Compare the original topic sources with the newly passed in form and remove any topic sources that aren't common between the two
        foreach ($originalTopicSources as $topicSource) {

            if (false === $topic->getTopicSources()->contains($topicSource)) {
                $em->remove($topicSource);
            }
        }

        $em->persist($topic);
        $em->flush();

        $this->addFlash('success','The topic has been updated successfully :)');
    }


    $project = $topic->getProject();
    $projectForm = $this->createForm(new ProjectType(array("user" => $this->getUser())), $project);

    $newTopic = new Topic();
    $newTopicForm = $this->createForm(new NewTopicType(), $newTopic);

    // Get tag names
    $em = $this->getDoctrine()
            ->getEntityManager();

    $response = array();
    $tags = $em->getRepository('AppBundle:Tag')->findAll();
    $tagNames = array();

    foreach ($tags as $tag) {
        array_push($tagNames, $tag->getName());
    }

    return $this->render('AppBundle:Topic:edit.html.twig', array(
        'project' => $topic->getProject(),
        'projectForm' => $projectForm->createView(),
        'newTopicForm' => $newTopicForm->createView(),
        'tags' => $tagNames,
        'topic' => $topic,
        'editTopicForm' => $editTopicForm->createView(),
        'facebook_app_id' => $this->container->getParameter('facebook_app_id_'.$this->get('kernel')->getEnvironment()),
        'facebook_app_secret' => $this->container->getParameter('facebook_app_secret_'.$this->get('kernel')->getEnvironment()),
        'facebook_app_access_token' => $this->container->getParameter('facebook_app_access_token_'.$this->get('kernel')->getEnvironment())
    ));
}

非常感谢任何帮助......我在这里失去理智!

*****更新 根据要求,这是相关的实体:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Validator\Constraints as Assert;
use JMS\Serializer\Annotation\Exclude;
use JMS\Serializer\Annotation\MaxDepth;

/**
 * Topic
 *
 * @ORM\Table(name="topics", indexes={@ORM\Index(name="project_id", columns={"project_id"})})
 * @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\TopicRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Topic {

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255, nullable=false)
     * @Assert\NotBlank(message="Listeners require a name")
     *
     */
    private $name;

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

    /**
     * Image file
     *
     * @var File
     *
     * @Assert\File(
     *     maxSize = "5M",
     *     mimeTypes = {"image/jpeg", "image/gif", "image/png", "image/tiff"},
     *     maxSizeMessage = "The maxmimum allowed file size is 5MB.",
     *     mimeTypesMessage = "Only the filetypes image are allowed."
     * )
     */
    protected $imageFile;

    /**
     * @ORM\Column(type="string", length=255, name="image_file")
     *
     * @var string $image
     */
    protected $image;

    /**
     * @var boolean
     *
     * @ORM\Column(name="exclude_from_api", type="boolean", nullable=true, options={"default": false})
     */
    protected $excludeFromApi = false;

    /**
     * @var integer
     *
     * @ORM\Column(name="feed_size", type="integer", options={"default": 50})
     * @Assert\GreaterThanOrEqual(
     *      message = "A listener's feed size cannot be less than 0",
     *      value = 0
     * )
     *
     */
    private $feedSize = 50;

    /**
     * @var boolean
     *
     * @ORM\Column(name="include_parents", type="boolean", nullable=true, options={"default": false})
     */
    private $includeParents = false;

    /**
     * @var boolean
     *
     * @ORM\Column(name="track_urls", type="boolean", nullable=true, options={"default": false})
     */
    private $trackUrls = false;

    /**
     * @var boolean
     *
     * @ORM\Column(name="active", type="boolean", nullable=true, options={"default": true})
     */
    private $active = true;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated_at", type="datetime", nullable=false)
     */
    private $updatedAt;

    /**
     * @var \AppBundle\Entity\Project
     *
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Project", inversedBy="topics")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="project_id", referencedColumnName="id")
     * })
     *
     * @Exclude
     *
     */
    private $project;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Rule", mappedBy="topics", cascade={"all"})
     * @ORM\JoinTable(name="topics_rules",
     *   joinColumns={
     *     @ORM\JoinColumn(name="topic_id", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="rule_id", referencedColumnName="id")
     *   }
     * )
     */
    private $rules;

    /**
     * @var \AppBundle\Entity\TopicSource
     *
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\TopicSource", mappedBy="topic", cascade={"all"})
     */
    private $topicSources;

    /**
     * @var \AppBundle\Entity\Historical
     *
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Historical", mappedBy="topic", cascade={"all"})
     *
     * @MaxDepth(1)
     *
     */
    private $historicals;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Entry", inversedBy="topics")
     * @ORM\JoinTable(name="entries_topics",
     *   joinColumns={
     *     @ORM\JoinColumn(name="topic_id", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="entry_id", referencedColumnName="id"),
     *     @ORM\JoinColumn(name="platform", referencedColumnName="platform")
     *   }
     * )
     */
    private $entries;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Tag", inversedBy="topics", cascade={"persist"})
     * @ORM\JoinTable(name="topics_tags",
     *   joinColumns={
     *     @ORM\JoinColumn(name="topic_id", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
     *   }
     * )
     */
    private $tags;

    /**
     * Constructor
     */
    public function __construct() {
        $this->topicSources = new \Doctrine\Common\Collections\ArrayCollection();
        $this->historicals = new \Doctrine\Common\Collections\ArrayCollection();
        $this->rules = new \Doctrine\Common\Collections\ArrayCollection();
        $this->entries = new \Doctrine\Common\Collections\ArrayCollection();
        $this->tags = new \Doctrine\Common\Collections\ArrayCollection();

        $this->setUpdatedAt(new \DateTime());
    }

    /**
     * @ORM\PreUpdate
     */
    public function setUpdatedAtValue() {
        $this->setUpdatedAt(new \DateTime());
    }

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

    /**
     * Set name
     *
     * @param string $name
     * @return Topic
     */
    public function setName($name) {
        $this->name = $name;

        return $this;
    }

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

    /**
     * Get Exclude from API
     *
     * @return boolean
     */
    public function getExcludeFromApi() {
        return $this->excludeFromApi;
    }

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

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

        return $this;
    }

    /**
     * Set Exclude From API
     *
     * @param boolean $excludeFromApi
     * @return Topic
     */
    public function setExcludeFromApi($excludeFromApi) {
        $this->excludeFromApi = $excludeFromApi;

        return $this;
    }

    /**
     * Set feedSize
     *
     * @param integer $feedSize
     * @return Topic
     */
    public function setFeedSize($feedSize) {
        $this->feedSize = $feedSize;

        return $this;
    }

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

    /**
     * Set includeParents
     *
     * @param boolean $includeParents
     * @return Topic
     */
    public function setIncludeParents($includeParents) {
        $this->includeParents = $includeParents;

        return $this;
    }

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

    /**
     * Set trackUrls
     *
     * @param boolean $trackUrls
     * @return Topic
     */
    public function setTrackUrls($trackUrls) {
        $this->trackUrls = $trackUrls;

        return $this;
    }

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

    /**
     * Set active
     *
     * @param boolean $active
     * @return Topic
     */
    public function setActive($active) {
        $this->active = $active;

        return $this;
    }

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

    /**
     * Set updatedAt
     *
     * @param \DateTime $updatedAt
     * @return Topic
     */
    public function setUpdatedAt($updatedAt) {
        $this->updatedAt = $updatedAt;

        return $this;
    }

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

    /**
     * Set project
     *
     * @param \AppBundle\Entity\Project $project
     * @return Topic
     */
    public function setProject(\AppBundle\Entity\Project $project = null) {
        $this->project = $project;

        # ~EN (2015): feed size is not set properly when topic is init'd, only updating $project would update this topic's feed size
        if($feedSize = $this->project->getFeedSize()){
            $this->feedSize = $feedSize;
        }

        return $this;
    }

    /**
     * Get project
     *
     * @return \AppBundle\Entity\Project
     */
    public function getProject() {
        return $this->project;
    }

    /**
     * Add rule
     *
     * @param \AppBundle\Entity\Rule $rule
     * @return Topic
     */
    public function addRule(\AppBundle\Entity\Rule $rule) {
        $rule->addTopic($this);
        $this->rules[] = $rule;

        return $this;
    }

    /**
     * Remove rule
     *
     * @param \AppBundle\Entity\Rule $rule
     */
    public function removeRule(\AppBundle\Entity\Rule $rule) {
        $this->rules->removeElement($rule);
    }

    /**
     * Get rules
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getRules() {
        return $this->rules;
    }

    /**
     * Add topicSource
     *
     * @param \AppBundle\Entity\TopicSource $topicSource
     * @return Topic
     */
    public function addTopicSource(\AppBundle\Entity\TopicSource $topicSource) {
        $topicSource->setTopic($this);
        $this->topicSources[] = $topicSource;

        return $this;
    }

    /**
     * Remove topicSource
     *
     * @param \AppBundle\Entity\topicSource $topicSource
     */
    public function removeTopicSource(\AppBundle\Entity\TopicSource $topicSource) {
        $this->topicSources->removeElement($topicSource);
    }

    /**
     * Get topicSources
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getTopicSources() {
        return $this->topicSources;
    }

    /**
     * @var \Doctrine\Common\Collections\Collection
     */
    private $topicSource;

    /**
     * Get topicSource
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getTopicSource() {
        return $this->topicSource;
    }

    /**
     * Add historical
     *
     * @param \AppBundle\Entity\Historical $historical
     * @return Historical
     */
    public function addHistorical(\AppBundle\Entity\Historical $historical) {
        $this->historicals[] = $historical;

        return $this;
    }

    /**
     * Remove historical
     *
     * @param \AppBundle\Entity\Historical $historical
     */
    public function removeHistorical(\AppBundle\Entity\Historical $historical) {
        $this->historicals->removeElement($historical);
    }

    /**
     * Get historicals
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getHistoricals() {
        return $this->historicals;
    }

    /**
     * Add entry
     *
     * @param \AppBundle\Entity\Entry $entry
     * @return Topic
     */
    public function addEntry(\AppBundle\Entity\Entry $entry) {
        $this->entries[] = $entry;

        return $this;
    }

    /**
     * Remove entry
     *
     * @param \AppBundle\Entity\Entry $entry
     */
    public function removeEntry(\AppBundle\Entity\Entry $entry) {
        $this->entries->removeElement($entry);
    }

    /**
     * Get entries
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getEntries($limit = null) {
        $to_return      = array();
        $max_entries    = ($limit != null)?$limit:$this->getFeedSize();
        foreach ($this->entries as $entry) {
            if (--$max_entries <= 0)
                break;
            $to_return[] = $entry;
        }
        return $to_return;
        //return new ArrayObject(array_slice((array) $this->entries, 0, $this->getFeedSize()));
    }

    /**
     * Add tags
     *
     * @param \AppBundle\Entity\Tag $tags
     * @return Topic
     */
    public function addTag(\AppBundle\Entity\Tag $tags) {
        $this->tags[] = $tags;

        return $this;
    }

    /**
     * Remove tags
     *
     * @param \AppBundle\Entity\Tag $tags
     */
    public function removeTag(\AppBundle\Entity\Tag $tags) {
        $this->tags->removeElement($tags);
    }

    /**
     * Get tags
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getTags() {
        return $this->tags;
    }

    /**
     * Sets imageFile.
     *
     * @param File $imageFile
     */
    public function setImageFile(File $imageFile = null) {
        $this->imageFile = $imageFile;
        // check if we have an old image path
        if (isset($this->image)) {
            // store the old name to delete after the update
            $this->temp = $this->image;
            $this->image = null;
        } else {
            $this->image = 'initial';
        }
    }

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

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

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

    /**
     * Called before saving the entity
     *
     * @ORM\PrePersist()
     * @ORM\PreUpdate()
     */
    public function preUpload() {
        $filename = sha1(uniqid(mt_rand(), true));
        if (null !== $this->imageFile) {
            $this->image = $filename . '.' . $this->imageFile->guessExtension();
        }
    }

    /**
     * Called before entity removal
     *
     * @ORM\PreRemove()
     */
    public function removeUpload() {
//        if ($file = $this->getAbsolutePath()) {
//            unlink($file);
//        }
    }

    /**
     * Called after entity persistence
     *
     * @ORM\PostPersist()
     * @ORM\PostUpdate()
     */
    public function upload() {
        // The file property can be empty if the field is not required
        if (null === $this->imageFile) {
            return;
        }

        // Use the original file name here but you should
        // sanitize it at least to avoid any security issues
        // move takes the target directory and then the
        // target filename to move to
        $this->imageFile->move(
                "%kernel.root_dir%/../web/uploads/topics", $this->image
        );

        // Set the path property to the filename where you've saved the file
        //$this->path = $this->file->getClientOriginalName();
        // Clean up the file property as you won't need it anymore
        $this->imageFile = null;
    }

}

<?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Event\LifecycleEventArgs; use Symfony\Component\HttpFoundation\File\File; use Symfony\Component\Validator\Constraints as Assert; use JMS\Serializer\Annotation\Exclude; use JMS\Serializer\Annotation\MaxDepth; /** * Topic * * @ORM\Table(name="topics", indexes={@ORM\Index(name="project_id", columns={"project_id"})}) * @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\TopicRepository") * @ORM\HasLifecycleCallbacks() */ class Topic { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string * * @ORM\Column(name="name", type="string", length=255, nullable=false) * @Assert\NotBlank(message="Listeners require a name") * */ private $name; /** * @var string * * @ORM\Column(name="description", type="text") * */ private $description; /** * Image file * * @var File * * @Assert\File( * maxSize = "5M", * mimeTypes = {"image/jpeg", "image/gif", "image/png", "image/tiff"}, * maxSizeMessage = "The maxmimum allowed file size is 5MB.", * mimeTypesMessage = "Only the filetypes image are allowed." * ) */ protected $imageFile; /** * @ORM\Column(type="string", length=255, name="image_file") * * @var string $image */ protected $image; /** * @var boolean * * @ORM\Column(name="exclude_from_api", type="boolean", nullable=true, options={"default": false}) */ protected $excludeFromApi = false; /** * @var integer * * @ORM\Column(name="feed_size", type="integer", options={"default": 50}) * @Assert\GreaterThanOrEqual( * message = "A listener's feed size cannot be less than 0", * value = 0 * ) * */ private $feedSize = 50; /** * @var boolean * * @ORM\Column(name="include_parents", type="boolean", nullable=true, options={"default": false}) */ private $includeParents = false; /** * @var boolean * * @ORM\Column(name="track_urls", type="boolean", nullable=true, options={"default": false}) */ private $trackUrls = false; /** * @var boolean * * @ORM\Column(name="active", type="boolean", nullable=true, options={"default": true}) */ private $active = true; /** * @var \DateTime * * @ORM\Column(name="updated_at", type="datetime", nullable=false) */ private $updatedAt; /** * @var \AppBundle\Entity\Project * * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Project", inversedBy="topics") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="project_id", referencedColumnName="id") * }) * * @Exclude * */ private $project; /** * @var \Doctrine\Common\Collections\Collection * * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Rule", mappedBy="topics", cascade={"all"}) * @ORM\JoinTable(name="topics_rules", * joinColumns={ * @ORM\JoinColumn(name="topic_id", referencedColumnName="id") * }, * inverseJoinColumns={ * @ORM\JoinColumn(name="rule_id", referencedColumnName="id") * } * ) */ private $rules; /** * @var \AppBundle\Entity\TopicSource * * @ORM\OneToMany(targetEntity="AppBundle\Entity\TopicSource", mappedBy="topic", cascade={"all"}) */ private $topicSources; /** * @var \AppBundle\Entity\Historical * * @ORM\OneToMany(targetEntity="AppBundle\Entity\Historical", mappedBy="topic", cascade={"all"}) * * @MaxDepth(1) * */ private $historicals; /** * @var \Doctrine\Common\Collections\Collection * * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Entry", inversedBy="topics") * @ORM\JoinTable(name="entries_topics", * joinColumns={ * @ORM\JoinColumn(name="topic_id", referencedColumnName="id") * }, * inverseJoinColumns={ * @ORM\JoinColumn(name="entry_id", referencedColumnName="id"), * @ORM\JoinColumn(name="platform", referencedColumnName="platform") * } * ) */ private $entries; /** * @var \Doctrine\Common\Collections\Collection * * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Tag", inversedBy="topics", cascade={"persist"}) * @ORM\JoinTable(name="topics_tags", * joinColumns={ * @ORM\JoinColumn(name="topic_id", referencedColumnName="id") * }, * inverseJoinColumns={ * @ORM\JoinColumn(name="tag_id", referencedColumnName="id") * } * ) */ private $tags; /** * Constructor */ public function __construct() { $this->topicSources = new \Doctrine\Common\Collections\ArrayCollection(); $this->historicals = new \Doctrine\Common\Collections\ArrayCollection(); $this->rules = new \Doctrine\Common\Collections\ArrayCollection(); $this->entries = new \Doctrine\Common\Collections\ArrayCollection(); $this->tags = new \Doctrine\Common\Collections\ArrayCollection(); $this->setUpdatedAt(new \DateTime()); } /** * @ORM\PreUpdate */ public function setUpdatedAtValue() { $this->setUpdatedAt(new \DateTime()); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set name * * @param string $name * @return Topic */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Get Exclude from API * * @return boolean */ public function getExcludeFromApi() { return $this->excludeFromApi; } /** * Get description * * @return string */ public function getDescription() { return $this->description; } /** * Set description * * @param string $description * @return Topic */ public function setDescription($description) { $this->description = $description; return $this; } /** * Set Exclude From API * * @param boolean $excludeFromApi * @return Topic */ public function setExcludeFromApi($excludeFromApi) { $this->excludeFromApi = $excludeFromApi; return $this; } /** * Set feedSize * * @param integer $feedSize * @return Topic */ public function setFeedSize($feedSize) { $this->feedSize = $feedSize; return $this; } /** * Get feedSize * * @return integer */ public function getFeedSize() { return $this->feedSize; } /** * Set includeParents * * @param boolean $includeParents * @return Topic */ public function setIncludeParents($includeParents) { $this->includeParents = $includeParents; return $this; } /** * Get includeParents * * @return boolean */ public function getIncludeParents() { return $this->includeParents; } /** * Set trackUrls * * @param boolean $trackUrls * @return Topic */ public function setTrackUrls($trackUrls) { $this->trackUrls = $trackUrls; return $this; } /** * Get trackUrls * * @return boolean */ public function getTrackUrls() { return $this->trackUrls; } /** * Set active * * @param boolean $active * @return Topic */ public function setActive($active) { $this->active = $active; return $this; } /** * Get active * * @return boolean */ public function getActive() { return $this->active; } /** * Set updatedAt * * @param \DateTime $updatedAt * @return Topic */ public function setUpdatedAt($updatedAt) { $this->updatedAt = $updatedAt; return $this; } /** * Get updatedAt * * @return \DateTime */ public function getUpdatedAt() { return $this->updatedAt; } /** * Set project * * @param \AppBundle\Entity\Project $project * @return Topic */ public function setProject(\AppBundle\Entity\Project $project = null) { $this->project = $project; # ~EN (2015): feed size is not set properly when topic is init'd, only updating $project would update this topic's feed size if($feedSize = $this->project->getFeedSize()){ $this->feedSize = $feedSize; } return $this; } /** * Get project * * @return \AppBundle\Entity\Project */ public function getProject() { return $this->project; } /** * Add rule * * @param \AppBundle\Entity\Rule $rule * @return Topic */ public function addRule(\AppBundle\Entity\Rule $rule) { $rule->addTopic($this); $this->rules[] = $rule; return $this; } /** * Remove rule * * @param \AppBundle\Entity\Rule $rule */ public function removeRule(\AppBundle\Entity\Rule $rule) { $this->rules->removeElement($rule); } /** * Get rules * * @return \Doctrine\Common\Collections\Collection */ public function getRules() { return $this->rules; } /** * Add topicSource * * @param \AppBundle\Entity\TopicSource $topicSource * @return Topic */ public function addTopicSource(\AppBundle\Entity\TopicSource $topicSource) { $topicSource->setTopic($this); $this->topicSources[] = $topicSource; return $this; } /** * Remove topicSource * * @param \AppBundle\Entity\topicSource $topicSource */ public function removeTopicSource(\AppBundle\Entity\TopicSource $topicSource) { $this->topicSources->removeElement($topicSource); } /** * Get topicSources * * @return \Doctrine\Common\Collections\Collection */ public function getTopicSources() { return $this->topicSources; } /** * @var \Doctrine\Common\Collections\Collection */ private $topicSource; /** * Get topicSource * * @return \Doctrine\Common\Collections\Collection */ public function getTopicSource() { return $this->topicSource; } /** * Add historical * * @param \AppBundle\Entity\Historical $historical * @return Historical */ public function addHistorical(\AppBundle\Entity\Historical $historical) { $this->historicals[] = $historical; return $this; } /** * Remove historical * * @param \AppBundle\Entity\Historical $historical */ public function removeHistorical(\AppBundle\Entity\Historical $historical) { $this->historicals->removeElement($historical); } /** * Get historicals * * @return \Doctrine\Common\Collections\Collection */ public function getHistoricals() { return $this->historicals; } /** * Add entry * * @param \AppBundle\Entity\Entry $entry * @return Topic */ public function addEntry(\AppBundle\Entity\Entry $entry) { $this->entries[] = $entry; return $this; } /** * Remove entry * * @param \AppBundle\Entity\Entry $entry */ public function removeEntry(\AppBundle\Entity\Entry $entry) { $this->entries->removeElement($entry); } /** * Get entries * * @return \Doctrine\Common\Collections\Collection */ public function getEntries($limit = null) { $to_return = array(); $max_entries = ($limit != null)?$limit:$this->getFeedSize(); foreach ($this->entries as $entry) { if (--$max_entries <= 0) break; $to_return[] = $entry; } return $to_return; //return new ArrayObject(array_slice((array) $this->entries, 0, $this->getFeedSize())); } /** * Add tags * * @param \AppBundle\Entity\Tag $tags * @return Topic */ public function addTag(\AppBundle\Entity\Tag $tags) { $this->tags[] = $tags; return $this; } /** * Remove tags * * @param \AppBundle\Entity\Tag $tags */ public function removeTag(\AppBundle\Entity\Tag $tags) { $this->tags->removeElement($tags); } /** * Get tags * * @return \Doctrine\Common\Collections\Collection */ public function getTags() { return $this->tags; } /** * Sets imageFile. * * @param File $imageFile */ public function setImageFile(File $imageFile = null) { $this->imageFile = $imageFile; // check if we have an old image path if (isset($this->image)) { // store the old name to delete after the update $this->temp = $this->image; $this->image = null; } else { $this->image = 'initial'; } } /** * @return File */ public function getImageFile() { return $this->imageFile; } /** * @param string $imageName */ public function setImage($image) { $this->image = $image; } /** * @return string */ public function getImage() { return $this->image; } /** * Called before saving the entity * * @ORM\PrePersist() * @ORM\PreUpdate() */ public function preUpload() { $filename = sha1(uniqid(mt_rand(), true)); if (null !== $this->imageFile) { $this->image = $filename . '.' . $this->imageFile->guessExtension(); } } /** * Called before entity removal * * @ORM\PreRemove() */ public function removeUpload() { // if ($file = $this->getAbsolutePath()) { // unlink($file); // } } /** * Called after entity persistence * * @ORM\PostPersist() * @ORM\PostUpdate() */ public function upload() { // The file property can be empty if the field is not required if (null === $this->imageFile) { return; } // Use the original file name here but you should // sanitize it at least to avoid any security issues // move takes the target directory and then the // target filename to move to $this->imageFile->move( "%kernel.root_dir%/../web/uploads/topics", $this->image ); // Set the path property to the filename where you've saved the file //$this->path = $this->file->getClientOriginalName(); // Clean up the file property as you won't need it anymore $this->imageFile = null; } }

1 个答案:

答案 0 :(得分:1)

这是因为数据库中的某个字段为空。因此,请尝试删除表格中的所有内容,然后再次生成command