gpt4 book ai didi

symfony - Sonata Admin Bundle 一对多关系不保存外部 ID

转载 作者:行者123 更新时间:2023-12-02 04:41:00 26 4
gpt4 key购买 nike

我在使用 SonataAdminBunle 与 symfony 2.2 时遇到问题。我有一个 Project 实体和一个 ProjectImage 实体,并指定了这两个实体之间的一对多关系,如下所示:

class Project
{
/**
* @ORM\OneToMany(targetEntity="ProjectImage", mappedBy="project", cascade={"all"}, orphanRemoval=true)
*/
private $images;
}

class ProjectImage
{

/**
* @ORM\ManyToOne(targetEntity="Project", inversedBy="images")
* @ORM\JoinColumn(name="project_id", referencedColumnName="id")
*/
private $project;
}

我已经配置了 ProjectAdmin 和 ProjectImageAdmin:

class ProjectAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('title')
->add('website')
->add('description', 'textarea')
->add('year')
->add('tags')
->add('images', 'sonata_type_collection', array(
'by_reference' => false
), array(
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'id',
))
;
}
}

class ProjectImageAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('file', 'file', array(
'required' => false
))
;
}
}

问题在于,在数据库的project_image表中,project_id未保存,而所有其他数据均已保存,并且图像也已保存。在其他地方找不到有效的答案。

最佳答案

虽然不相关,但我会稍微调整一下您的一对多注释:

class Project
{
/**
* @ORM\OneToMany(targetEntity="ProjectImage", mappedBy="project", cascade={"persist"}, orphanRemoval=true)
* @ORM\OrderBy({"id" = "ASC"})
*/
private $images;
}

回到正轨,您的注释和 Sonata 管理表单看起来很好,所以我很确定您在项目实体类中缺少这些方法之一:

public function __construct() {
$this->images = new \Doctrine\Common\Collections\ArrayCollection();
}

public function setImages($images)
{
if (count($images) > 0) {
foreach ($images as $i) {
$this->addImage($i);
}
}

return $this;
}

public function addImage(\Acme\YourBundle\Entity\ProjectImage $image)
{
$image->setProject($this);

$this->images->add($image);
}

public function removeImage(\Acme\YourBundle\Entity\ProjectImage $image)
{
$this->images->removeElement($image);
}

public function getImages()
{
return $this->Images;
}

在你的管理类中:

public function prePersist($project)
{
$this->preUpdate($project);
}

public function preUpdate($project)
{
$project->setImages($project->getImages());
}

关于symfony - Sonata Admin Bundle 一对多关系不保存外部 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16993733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com