Symfony1 如何";“订购”;管理生成器中的sfWidgetFormDoctrineChoice

Symfony1 如何";“订购”;管理生成器中的sfWidgetFormDoctrineChoice,symfony1,doctrine,symfony-1.4,admin-generator,Symfony1,Doctrine,Symfony 1.4,Admin Generator,我正在使用Symfony 1.4和Doctrine 假设我有两类:品牌和产品 当我在基于管理的管理生成器中创建新产品时,我想从下拉列表中选择一个品牌。 管理员生成器正在为我这样做,自动创建一个sfWidgetFormDoctrineChoice 问题是这些品牌是按id订购的。我希望它们是按“标签”字段订购的 为了做到这一点,我在ProductForm课程中做了以下操作: $this->widgetSchema['brand_id']->addOption('order_by','la

我正在使用Symfony 1.4和Doctrine

假设我有两类:品牌和产品

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

问题是这些品牌是按id订购的。我希望它们是按“标签”字段订购的

为了做到这一点,我在
ProductForm
课程中做了以下操作:

$this->widgetSchema['brand_id']->addOption('order_by','label');
但我得到了以下错误:

语法错误或访问冲突:1064 您的SQL语法有错误; 检查相应的手册 您的MySQL服务器版本 在第行“a”附近使用的正确语法 1.查询失败:“选择b.id作为b\u id,选择b.external\u id作为 b__外部id,b.标签为b__标签, b、 在创建时与在创建时相同, b、 更新时间为b更新时间为 品牌b由l a订购”

order by语句真的很奇怪。我不明白为什么它似乎要删掉order by语句的名称


Edit:显然,“order\u by”选项需要一个数组作为第二个参数。它期望什么值?

您应该在这里查看:

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

对于条令,需要定义/覆盖addSortQuery,对于推进,需要定义/覆盖addSortCriteria


建议您查看缓存文件夹,看看自动生成的类是什么样子,以了解其工作原理。

我没有尝试benlumley的解决方案,因为我找到我的解决方案时他答对了。这似乎比我最后做的更乏味

我查看了源代码,以了解所有这些是如何工作的。 “order_by”选项需要一个数组,指定要对结果进行排序的字段以及“asc”或“desc”:

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

它很有魅力。

我完全误解了你的问题!我的任务是按外部表上的字段对管理生成器上的列表页面进行排序,这根本不是您想要的!