Symfony 3 OneToMany关系错误

时间:2018-02-08 20:00:23

标签: php symfony

我试图创建OneToMany表单,symfony探查器抛出实体错误,这里是代码:

Tasks.php

<?php

namespace ShopBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
 * 
 *
 * @ORM\Entity
 * @ORM\Table(name="task")
 */
class Tasks
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @ORM\Column(type="string", nullable=true,length=100)
     * 
     */
    protected $description;
    /**
     * @ORM\OneToMany(targetEntity="ShopBundle\Entity\Tags", cascade={"all"}, mappedBy="name")
     */
    protected $tags;

    public function __construct()
    {
        $this->tags = new ArrayCollection();
    }

    public function getId()
    {
        return $this->id;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getDescription()
    {
        return $this->description;
    }

    public function setDescription($description)
    {
        $this->description = $description;
    }

    public function getTags()
    {
        return $this->tags;
    }

    public function addTag(Tags $tag)
    {
        $this->tags->add($tag);
    }

    public function removeTag(Tags $tag)
    {
        $this->tags->removeElement($tag);
    }
}

这是Tags.php

<?php

namespace ShopBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
 * 
 * @ORM\Entity
 * @ORM\Table(name="tag")
 */
class Tags
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @ORM\ManyToOne(targetEntity="ShopBundle\Entity\Tasks", inversedBy="tags")
     * @ORM\JoinColumn(name="task")
     */
    protected $name;

    public function getId()
    {
        return $this->id;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setName($name)
    {
        $this->name = $name;
    }
}

分析器抛出2个错误: ShopBundle \ Entity \ Tasks#标签的关联是指拥有方字段ShopBundle \ Entity \ Tags#name,它不是定义为关联,而是字段。

ShopBundle \ Entity \ Tasks#标签的关联是指不存在的拥有方字段ShopBundle \ Entity \ Tags#name。

它将数据保存到数据库中,但我无法从数据库中获取数据

1 个答案:

答案 0 :(得分:0)

首先检查调试CLI告诉你的内容:

php bin/console doctrine:schema:validate

从Doctrine docs One-To-Many, Bidirectional

中查看此示例

Tags@JoinColumn中,您还应添加要与之关联的实体Tasks中的字段的字段名称。 (referencedColumnName

另外我可以看到$name不是一个字段,你想保留这个映射的实体?尝试添加另一个名称为entity的字段,而不是在$name之前添加注释(顺便说一句,它也会误导期望标记名称,但是获取实体Task)。

例如:

// Tags.php

/**
 * @ManyToOne(targetEntity="ShopBundle\Entity\Tasks", inversedBy="tags")
 * @JoinColumn(name="task_id", referencedColumnName="id")
 */
 protected $task;

然后记得改变Tasks实体中的映射:

// Tasks.php

/**
 * @ORM\OneToMany(targetEntity="ShopBundle\Entity\Tags", 
 * cascade={"all"}, mappedBy="task")
 */
 protected $tags;

最后更新您的架构:

php bin/console doctrine:schema:update --force

希望有所帮助