HIHO,
我想要实现的目标:我有项目,在项目编辑中,有一个表格,我可以放下图像(使用dropzone.js),这些图像被保存并分配给给定的项目。
图片上传工作,图像实体被保存到图像表,他们有正确的project_id。但是,如果我访问Project Enity,项目数组中的“images”为“null”。不是图像实体的集合。 它看起来像一个简单的私有变量,没有默认值。 我想我的OneToMany和ManyToOne协会似乎不起作用。
一些代码:
Project.php
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Image", mappedBy="project", cascade={"persist, remove"})
*/
private $images;
/**
* @return \Doctrine\Common\Collections\Collection
*/
public function getImages()
{
return $this->images;
}
public function addImage(Image $image)
{
$this->images[] = $image;
}
public function removeImage(Image $image) {
$this->images->removeElement($image);
}
Image.php
/**
* @var \AppBundle\Entity\Project
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Project", inversedBy="images")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="project_id", referencedColumnName="id")
* })
*/
private $project;
/**
* Set project
*
* @param \AppBundle\Entity\Project $project
*
* @return Image
*/
public function setProject(\AppBundle\Entity\Project $project = null)
{
$this->project = $project;
return $this;
}
/**
* Get project
*
* @return \AppBundle\Entity\Project
*/
public function getProject()
{
return $this->project;
}
所有内容都保存到DB
但图像为“null”(不是ArrayCollection :()
也许,缺少一些东西。但我没有看到它(虽然它是soooo基本的东西)
干杯 阿德里安
答案 0 :(得分:0)
在Project.php中执行以下操作
在构造函数中,添加以下内容:
public function __construct()
{
// ...
$this->images = new ArrayCollection();
}
*将addImage函数更改为:
public function addImage(Image $image)
{
if(!$this-images->contains($image))
$this-images->add(image);
}
然后在Image.php中,将setProject更改为:
public function setProject(\AppBundle\Entity\Project $project = null)
{
$this->project = $project;
if($project != null)
$project->addImage($this);
return $this;
}
保留一些图像并检查“图像”是否为空。
答案 1 :(得分:0)
我同意Medard关于构造函数的意见,你也可以尝试在oneToMany注释上将fetch参数设置为lazy。
也许是paramConverter的错过
答案 2 :(得分:0)
哦,男孩......
当我从DB生成实体(带有doctrine:generate)时,在生成过程中有映射文件(参见http://symfony.com/doc/current/doctrine/reverse_engineering.html)
一旦我删除了src / AppBundle / Resources / config / doctrine文件夹(其中包含orm.config.xml文件),图像就显示为持久的ArrayCollection。
但结果仍为空。 所以我不得不另外将fetch =“EAGER”放入OneToMany Mapping中,因为Lazyloading似乎没有正常工作(在twig中转储时,结果project.images没有初始化)
非常感谢你的帮助。最后,我的图像正常显示。
如果symfony会在dev.log中写入映射错误,那就太好了,所以我不必搜索2天。
氰 阿德里安