Symfony 3:通过一个控制器添加两个不同的实体



我有三个实体:

[Formula] ----OneToMany----> [FormulaParameter] ---ManyToOne---> [Parameter]

我需要FormulaParameter之间的联接表,因为该关系包含名称、值等信息。

实体

class Formula
{
/**
* @ORMOneToMany(targetEntity="FormulaDefinitionParameter", mappedBy="formula", cascade={"all"}, orphanRemoval=true)
*/
private $parameters;
}
class FormulaParameter
{
/**
* @ORMManyToOne(targetEntity="Formula", cascade={"persist"})
* @ORMJoinColumn(referencedColumnName="id", nullable=false)
*/
private $formula;
/**
* @ORMManyToOne(targetEntity="Parameter")
* @ORMJoinColumn(referencedColumnName="id", nullable=false)
*/
private $parameterFormat;
/**
* @var string|null
* @ORMColumn(name="parameter_name", type="string", length=1000, nullable=true)
*/
private $name;
}

控制器

我只使用一个表单将两个记录添加到数据库中:出于结构原因,我选择检索用于分别填充FormulaParameter记录的值,并在控制器中对元数据进行后处理。

这里是我代码的简化版本:

public function addFormulaAction(Request $request, $id)
{
$session = $request->getSession();
$em = $this->getDoctrine()->getManager();
if ($id) {
$formula = $this->selectData($session, $id, "Formula");
} else {
$formula = new TAMASAstroBundleEntityFormula();
}

$form = $this->get('form.factory')->create(AppFormFormulaType::class, $formulaDefinition);
if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
// METADATA RETRIEVAL
$params = $form->get('parameter')->getData();
foreach ($params as $id => $param){
// CREATION OF THE FORMULA PARAMETER
$paramFormula = new EFormulaParameter();
$paramFormula->setParameterFormat($em->find("Parameter", $id));
if (isset($param["name"]) && $param["name"]){
$paramFormula->setName($param["name"]);
}
$paramFormula->setFormula($formula);
// ADDITION OF THE FORMULA PARAMETER TO THE DATABASE
$em->persist($paramFormula);
$em->flush();
}
// ADDITION OF THE FORMULA TO THE DATABASE
$em->persist($formula);
$em->flush();

return $this->redirectToRoute('home');
}
return $this->render('addFormula.html.twig', array(
'form' => $form->createView(),
'formula' => $formula
));
}

正如您所看到的,我想要实现的是将来自不同实体的2条记录添加到同一控制器中的数据库。我试过几种方法,但都不起作用。通常触发的错误类似于:

An exception occurred while executing 'INSERT INTO formula_parameter (...) VALUES (?, ?, ?, ?)' with params [...]

你知道我该怎么做吗?

环境

Symfony version: 3.4.3
PHP version: 7.2.24
Firefox / Ubuntu 10.15.5

为了实现通过FormulaForm Controller添加ParameterFormula,我只需要向Formula实体添加一个addParameter()方法,如下所示:

/**
* Add parameter
* @param FormulaParameter $parameter
* @return Formula
*/
public function addParameter(FormulaParameter $parameter)
{
$this->parameters->add($parameter);
return $this;
}

然后在控制器内部使用此方法:

foreach ($params as $id => $param){
// CREATION OF THE FORMULA PARAMETER
$paramFormula = new EFormulaParameter();
$paramFormula->setParameter($em->find("Parameter", $id));
if (isset($param["name"]) && $param["name"]){
$paramFormula->setName($param["name"]);
}
$paramFormula->setFormula($formula);
// ADDITION TO THE FORMULA PARAMETER
$formula->addParameter($paramFormula);
}

相关内容

  • 没有找到相关文章

最新更新