我试图创建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。
它将数据保存到数据库中,但我无法从数据库中获取数据
答案 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
希望有所帮助