Symfony OneToMany与关联数组:插入新行而不是更新



我必须国际化一个应用程序,特别是一个名为Program的实体。为此,我创建了一个另一个实体 ProgramIntl,其中包含"locale"属性(en_GB、fr_FR 等(和必须国际化的字符串。我希望程序中的 programIntl 属性是一个关联数组(以语言环境作为键(。

我们有一个 API 来读/写程序。GET 和 POST 工作正常,但是当我想更新数据 (PUT( 时,programIntl 没有更新:启动插入查询(由于唯一约束而失败,但这不是问题(。

这是代码:

在程序中.php:

/**
* @var
*
* @ORMOneToMany(targetEntity="ProgramIntl", mappedBy="program", cascade={"persist", "remove", "merge"}, indexBy="locale", fetch="EAGER")
* @ORMJoinColumn(nullable=false, onDelete="cascade")
* @Groups({"program_read", "program_write"})
*/
private $programIntl;
public function addProgramIntl($programIntl)
{
$this->programIntl[$programIntl->getLocale()] = $programIntl;
$programIntl->setProgram($this);
return $this;
}
public function setProgramIntl($programIntls)
{
$this->programIntl->clear();
foreach ($programIntls as $locale => $programIntl) {
$programIntl->setLocale($locale);
$this->addProgramIntl($programIntl);
}
}
public function getProgramIntl()
{
return $this->programIntl;
}

在ProgramIntl.php中:

/**
* @ORMEntity(repositoryClass="AppRepositoryProgramIntlRepository")
* @ORMTable(name="program_intl",uniqueConstraints={@ORMUniqueConstraint(name="program_intl_unique", columns={"program_id", "locale"})})
*/
class ProgramIntl
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
* @Groups({"program_read", "program_write"})
*/
private $id;
/**
* @ORMManyToOne(targetEntity="AppEntityProgram", inversedBy="programIntl")
* @ORMJoinColumn(nullable=false)
*/
private $program;
/**
* @ORMColumn(type="string", length=5, options={"fixed" = true})
*/
private $locale;
/**
* @ORMColumn(type="string", length=64)
* @AssertNotBlank()
* @Groups({"program_read", "program_write"})
*/
private $some_attr;
/* ... */
}

知道"插入"而不是"更新"的原因是什么吗?

谢谢

我忘了提到我们使用api-platform。 但我自己找到了解决方案。如果有人感兴趣,将以下注释添加到类 Program 和 ProgramIntl 解决了这个问题:/* @ApiResource(属性={ * "normalization_context"={"组"={"program_read", "program_write"}}, * "denormalization_context"={"组"={"program_read", "program_write"}} * }) */

最新更新