1

我的 Poem 类有一个 symfony 管理员生成的模块。我的诗歌表对我的 MasterIndex 表 (user_id) 有一个 foreign_key 约束。当使用 Symfony 管理生成器时,在列表模式下,它会为我的 user_id 显示一个下拉过滤器。我可以通过修改 MasterIndex 类中的 __toString() 方法来更改正在显示的数据,以显示用户名而不是 Id。

如何对过滤器下拉列表中显示的数据进行排序?

我发现这个链接提出了一个解决方案,但peer_method它使用的似乎只适用于 Propel。

我在 Symfony 1.4 项目中使用 Doctrine 1.2。

4

1 回答 1

1

您可以在此处找到可用的选项sfWidgetFormDoctrineChoice

* model:        The model class (required)
* add_empty:    Whether to add a first empty value or not (false by default)
                If the option is not a Boolean, the value will be used as the text value
* method:       The method to use to display object values (__toString by default)
* key_method:   The method to use to display the object keys (getPrimaryKey by default)
* order_by:     An array composed of two fields:
                  * The column to order by the results (must be in the PhpName format)
                  * asc or desc
* query:        A query to use when retrieving objects
* multiple:     true if the select tag must allow multiple selections
* table_method: A method to return either a query, collection or single object

您可以使用如下order_by选项:...->setOption('order_by', array('some_field', 'asc')).

更新:

如果您想按多个字段排序,您可以编写自定义查询并向其添加多个 order by,然后使用queryortable_method选项而不是order_by.

例如(您应该将查询写入表类):

$query = Doctrine_Core::getTable('UserTable')->createQuery('u')->orderBy('u.last_name asc, u.first_name asc');
$this->getWidget('user_id')->setOption('query', $query);
// if you add some where condition to the query
// don't forget to set it to the validator as well
$this->getValidator('user_id')->setOption('query', $query);
于 2012-12-20T23:59:19.723 回答