【发布时间】:2015-02-12 22:40:01
【问题描述】:
我需要在两个实体之间建立单向的一对多关系。
为了让用户选择我使用实体字段类型的关系:
$builder->add('selectedItems','entity',array(
'class'=>'MY\ExBundle\Entity\MyRow',
'multiple'=>true,
'expanded'=>true,
)
)
但有了这个,我只有一个 checkbox 及其每个实体的标签。
除了checkbox 之外,我还需要将每个实体显示为一个表行,其列是基础实体的一些属性(例如价格、计数等),以便用户可以查看有关实体的更多详细信息并在需要时检查它们.
例如:
+---+-------+--------+--------------+
| | price | count | deliveryDate |
+---+-------+--------+--------------+
| X | 100 | 6 | 2015-01-02 |
+---+-------+--------+--------------+
| | 70 | 5 | 2015-02-03 |
+---+-------+--------+--------------+
我该怎么做?
我应该创建一个新的字段类型吗?如果是这样,我如何访问基础子实体?
或者我需要使用嵌入表单集合之类的东西?如果是这样,如何使 symfony 威胁它作为选择列表而不是新添加的条目。
编辑:
这是MY\ExBundle\Entity\MyRow 实体:
/**
* MyRow
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="ITW\BidBundle\Entity\MyRowRepository")
*/
class MyRow
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="count", type="integer")
*/
private $count;
/**
* @var integer
*
* @ORM\Column(name="price", type="integer")
*/
private $price;
/**
* @var \DateTime
*
* @ORM\Column(name="deliveryDate", type="date")
*/
private $deliveryDate;
/**
* @var string
*
* @ORM\Column(name="description", type="string", length=255,nullable=true)
*/
private $description;
}
编辑2: 我试图为此创建一个字段类型,这是我用于它的模板:
{%- block tablechoice_widget -%}
<table {{ block('widget_container_attributes') }}>
<thead>
<th></th>
<th>price</th>
<th>count</th>
</thead>
<tbody>
{%- for child in form %}
<tr>
<td>{{- form_widget(child) -}}</td>
<td></td>
<td></td>
</tr>
{% endfor -%}
</tbody>
</table>
{%- endblock tablechoice_widget -%}
但我无法访问孩子 (checkboxes) 的底层实体 (MyRow)。
【问题讨论】:
-
听起来这些实体是相关的,因为它们具有相同的字段名称。是否存在从中派生的基础实体?您可以使用基本实体来显示行并在表单中只使用 1 个实体吗?
-
你想显示一些
MY\ExBundle\Entity\MyRow属性,我理解正确吗? -
@George:是的,实体来自同一个类,只有每一行都是该类的一个实例
-
@DonCallisto:请检查我对问题的编辑
-
我还是不明白。 “姓名”和“家人”在哪里?他们来自什么实体?
标签: php symfony symfony-forms