我的诗歌类有一个symfony admin生成的模块。我的poem表对我的MasterIndex表(user_id)有一个foreign_key约束。使用Symfony管理生成器时,在列表模式下,它会显示我的user_id的下拉过滤器。我可以通过修改MasterIndex类中的__toString()方法来更改正在显示的数据,以显示用户名而不是Id。
如何对过滤器下拉列表中显示的数据进行排序?
我找到了提出解决方案的this链接,但它使用的peer_method
似乎只适用于Propel。
我正在使用Doctrine 1.2和我的Symfony 1.4项目。
答案 0 :(得分:1)
您可以找到sfWidgetFormDoctrineChoice
here
* 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'))
。
<强>更新强>
如果您想按多个字段排序,可以编写自定义查询并添加多个订单,然后使用query
或table_method
选项代替order_by
。
E.g。 (您应该将查询写入表类中):
$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);