1

我正在尝试制作一个用于将比赛结果添加到事件的表单,但无法弄清楚如何在一个选择框的选项中显示连接在一起的表中的信息。

这是我的数据库结构:

人员表:

id | name
----------
1  | fred
2  | dave
3  | james

参赛者表(代码是参赛者的比赛编号——你别在衬衫上的那种东西):

id | code | person_id | category_id
---------------------------------
1  | 210  | 1         | 1
2  | 211  | 2         | 1
3  | 212  | 3         | 1
4  | 156  | 1         | 2
6  | 157  | 3         | 2

结果表:

id | time | entrant_id
---------------------
1  | 1:20 | 1
2  | 1:35 | 2
3  | 2:02 | 3

将结果添加到 Category=1 时的所需输出:

<select>
    <option>210 - Fred</option>
    <option>211 - Dave</option>
    <option>212 - James</option>
</select>

我目前在我的 ResultType 中获得的代码只是让我得到了 person.name,这是一个好的开始(以每个名称 1 个额外查询为代价),但不是 entrant.code:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('time')
        ->add('entrant', 'entity', array(
            'class'=>'KP\EventsBundle\Entity\Entrant', 
            'property' => 'person.name',
            ));
}

如何在同一个选项列表中同时获得 entrant.code 和 person.name?

我只用了几个星期的 Symfony,所以请对我温柔一点。

4

1 回答 1

0

我想到的最简单的__toString()方法是在类中实现该方法Entrant

public function __toString()
{
    return sprintf("%d %s", $this->code, $this->person->getName());
}

从表单类型的字段中删除property选项entrant以使其使用该方法。

要解决额外的查询问题,您可以在类型选项中执行fetch joinquery_builderentity

于 2013-03-01T21:51:19.577 回答