我有一个表单,用于将数据添加到budget
表中。它的形式在其中的一部分中包含来自另一个名为material
的表的数据列表,该表仅列出数据库中每种材料的名称。每个项目旁边都有两个input
字段,一个用于数量,一个用于价格,属于budget
表。贝娄是我在我看来写的代码:
{% for material in materials %}
<div class="col-lg-2">
{{ material.name }}
</div>
<div class="col-lg-10">
<input type="hidden" class="material-price" value="{{ material.price }}"/>
<input class="n-materials" type="number" size="15" name="cdg_budget_type[quantity]" value="0"/>
- R$
<input class="final-price" type="number" size="5" name="cdg_budget_type[price]" value="0" disabled/>
</div>
{% endfor %}
hidden
字段仅用于通过JavaScript将价格数量相乘,并在price
字段中将其打印出来。这就是我找到的解决方案。
来自budget
的字段材料是作为数组类型创建的,所以我需要知道如何将其保存到表中,例如:
"Material A" = [
["quantity" => 12],
["price" => 124]
],
...
答案 0 :(得分:2)
一旦您需要将整个数组存储到数据库字段中,您就可以确定数据库模型是错误的。您需要的是一个新的实体和一个新的数据库表。如何调用此表是您自己的选择,但我们可以说您将其称为“必需品”。现在,您的预算表将与您的新表格必需品具有OneToMany关系。
您可以通过两种方式设置“必需品”表:
-id -material_id
在这种情况下,如果您更新材料价格,预算价格将会发生变化。
OR
-id -数量 正价
在这种情况下,您的预算计算不会改变
拿一杯咖啡,一张纸和一支铅笔,给自己时间考虑数据模型。
答案 1 :(得分:0)
让Doctrine帮助你。向您的实体添加One-to-Many。 有关所有类型的关系,请参阅docs。 别忘了运行 app / console doctrine:generate:entities 命令来自动生成方法。
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Budget
*
* @ORM\Table()
* @ORM\Entity
*/
class Budget
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="description", type="string", length=64)
*/
private $description;
/**
* @ORM\OneToMany(targetEntity="Necessity", mappedBy="budget")
**/
private $necessities;
public function __construct() {
$this->necessities = new ArrayCollection();
}
}
和必要实体:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Necessity
*
* @ORM\Table()
* @ORM\Entity
*/
class Necessity
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="description", type="string", length=64)
*/
private $description;
/**
* @var float
*
* @ORM\Column(name="price", type="float")
*/
private $price;
/**
* @ManyToOne(targetEntity="Budget", inversedBy="necessities")
* @JoinColumn(name="budget_id", referencedColumnName="id")
**/
private $budget;
}