如何“排序依据”中的管理程序生成一个sfWidgetFormDoctrineChoice
-
21-09-2019 - |
题
我使用的Symfony 1.4和原则。
让我们说我有2类:一品牌和产品
当我创建基于管理程序生成器管理一个新的产品,我想从下拉列表中选择一个品牌。
管理员发生器这样做对我来说,自动创建sfWidgetFormDoctrineChoice
。
的问题是,各品牌都按ID进行排序。我希望他们通过自己的“标签”字段进行排序。
为了做到这一点我确实在我的ProductForm
类以下内容:
$this->widgetSchema['brand_id']->addOption('order_by','label');
不过,我得到以下错误:
语法错误或访问冲突:1064 您的SQL语法错误; 检查对应于所述手动 你的MySQL服务器版本的 使用附近的“a”线正确的语法 1.失败查询:“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 品牌B ORDER BY升一个“
这是声明的顺序是很奇怪的。我不明白为什么它似乎削减语句顺序的名称。
修改强>显然,“ORDER_BY”选项期待数组作为第二个参数。它期待什么样的价值观?
解决方案
我没有尝试benlumley的解决方案,因为他回答的是,当我发现我的解决方案。这似乎比我结束做比较繁琐。
我看了看源代码弄清楚这一切是如何工作的。 原来,“ORDER_BY”选项需要一个阵列指定哪一个希望订购的结果,要么“递增”或“降序”的字段中:
$this->widgetSchema['product_id']->addOption('order_by',array('label','asc'));
它像一个魅力。
其他提示
您应该看看这里:
http://trac.symfony-project.org/wiki/HowtoSortAdminGeneratorListByForeignTableName
其基于关闭旧版本的symfony,所以怀疑它的链接将无法正常工作的插件。但我认为方法应该还是声音 - 它的关键是,你必须添加方法的动作来拦截和修改这个特定的字段排序的默认处理方式:
有关教义,需要定义/覆盖addSortQuery,用于推进,addSortCriteria。
建议你在缓存文件夹看看,看看自动生成的类看起来想了解它是如何工作的窍门。