【发布时间】:2011-03-25 17:14:19
【问题描述】:
我想扩展 i18n 行为,以便它在任何类型的查询(DQL、关系、getTable)上自动加入转换表。
此外,它需要定义默认语言参数,所以当我在没有设置语言的情况下进行查询时,它会退回到默认语言。
注意:我正在寻找一种通用行为,因此它适用于所有 i18n 模型对象,而不是为每个类编写和覆盖。
这是一个例子:
表product -> id、category_id、价格...
表product_translation -> id、语言、名称、描述...
当我做这样的事情时,使用当前的解决方案:Doctrine_Core::getTable('Product')->findAll(),它可以在不加入翻译的情况下获得所有产品。
所以在控制器中我必须循环遍历所有记录并重新应用翻译值,$product->name = $product->Translation['en']->name
我想要这样的东西:
-
Doctrine_Core::getTable('Product')->findAll()它应该得到 lang='en' 的连接值 -
Doctrine_Core::getTable('Product)->findAll('en')同上 - 它也应该适用于关系,例如,如果我有一个类 User 有很多产品
$user->Products它应该返回一个包含翻译的集合。 - 类似
$user->Products('en')的东西也应该返回其他(非默认)语言的集合 - 魔术函数也不错(如果可能的话)...类似于
Doctrine_Core::getTable('Product')->getByCategoryAndLang(1,'en')
有人可以帮忙吗?我正在查看模板和行为,我认为这是要走的路,但不知道如何实现这一点
编辑:我发现对此没什么兴趣,所以让我尝试一个更简单的问题。您通常如何通过关系获得 i18n 字段。例如,我如何致电$user->Products 并获取已加载翻译的产品?
【问题讨论】:
标签: php oop orm internationalization doctrine