我正在构建一个在嵌入式文件提交表单中的条目表单。这两个实体通过双向关系相关联:
class Entry
{
/**
*@ORM\OneToMany(targetEntity="OOTN\BlogBundle\Entity\Image", mappedBy="Entry", cascade={"persist"})
*@ORM\JoinColumn(nullable=false)
*/
private $image;
//rest of Entry class
class Image
{
/**
*@ORM\ManyToOne(targetEntity="OOTN\BlogBundle\Entity\Entry", cascade={"persist"})
*@ORM\JoinColumn(nullable=false)
*/
private $entry;
//attributes id, date, url and alt here
private $file;
public function upload()
{
if (null === $this->file)
{
return;
}
$name = $this->file->getClientOriginalName();
$this->file->move($this->getUploadRootDir(), $name);
$this->url = $name;
$this->alt = $name;
}
//functions getUploadDir and getUploadRootDir here
表单嵌入正常但是在持续输入时,我收到一个SQL错误,告诉我image的entry_id为null。我认为symfony会自己解决这个问题,但我仍然试图在控制器中手动设置它,如下所示:
$entry->getImage()->setEntry($entry);
当我这样做时,不仅entry_id为null,而且url和alt也是如此。就好像upload()没有完成它的工作(但它确实如此,因为文件确实上传了)。我无法弄明白,有人知道发生了什么?
答案 0 :(得分:0)
感谢Ninir的评论,我想通了。确实在入门类中需要一个addImage方法,加上一个如下所示的构造函数:
public function __construct()
{
$this->image = new ArrayCollection();
//don't forget a "use Doctrine\Common\Collections\ArrayCollection;" statement
}
在您的控制器中,执行以下操作:
$listImages = $entry->getImage();
foreach($listImages as $image)
{
$entry->addImage($image);
$image->setEntry($entry);
$image->upload();
}
它为我做了诀窍。