7

我正在使用 Symfony 1.4 和 Doctrine。

假设我有 2 个类:一个品牌和一个产品。

当我在基于 Admin Generator 的管理员中创建新产品时,我想从下拉列表中选择一个品牌。Admin Generator 正在为我做这件事,自动创建一个sfWidgetFormDoctrineChoice.

问题是品牌是按 id 排序的。我希望它们按其“标签”字段排序。

为了做到这一点,我在ProductForm课堂上做了以下事情:

$this->widgetSchema['brand_id']->addOption('order_by','label');

但我收到以下错误:

语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“a”附近使用正确的语法。失败的查询:“SELECT b.id AS b__id, b.external_id AS b__external_id, b.label AS b__label, b.created_at AS b__created_at, b.updated_at AS b__updated_at FROM brand b ORDER BY la"

order by 语句真的很奇怪。我不明白为什么它似乎通过声明来削减订单的名称。

编辑:显然 'order_by' 选项需要一个数组作为第二个参数。它期望什么值?

4

2 回答 2

19

我没有尝试 benlumley 的解决方案,因为当我找到我的解决方案时他就回答了。这似乎比我结束的工作更乏味。

我查看了源代码以了解这一切是如何工作的。事实证明,“order_by”选项需要一个数组来指定要对结果排序的字段以及“asc”或“desc”:

$this->widgetSchema['product_id']->addOption('order_by',array('label','asc'));

它就像一个魅力。

于 2010-02-17T14:39:43.970 回答
2

你应该看看这里:

http://trac.symfony-project.org/wiki/HowtoSortAdminGeneratorListByForeignTableName

它基于旧版本的 symfony,所以怀疑它链接的插件不起作用。但是我认为该方法仍然应该是合理的-关键是您必须在操作中添加方法以拦截并修改按此特定字段进行排序的默认处理:

对于教义,您需要定义/覆盖 addSortQuery,对于推进,addSortCriteria。

建议您查看缓存文件夹以了解自动生成的类的外观,以了解其工作原理。

于 2010-02-17T14:08:56.760 回答