我想扩展i18n的行为,以便它自动加入翻译表,在任何类型的查询(DQL,关系,getTable)上自动加入。
此外,它需要定义默认的语言参数,所以当我做一个没有语言设置的查询时,它会回到默认语言。
注意:我正在寻找一个通用行为,因此适用于所有i18n模型对象,而不是为每个类编写和覆盖。学说1.2自动加入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->Products
它应该返回集合与翻译包括一类用户。 - 也像
$user->Products('en')
应返回其他(非默认)语言的集合 - 神奇的功能也将是不错(如果可能的话)......像
Doctrine_Core::getTable('Product')->getByCategoryAndLang(1,'en')
谁能帮助?我期待在模板和行为,我认为这是要走的路,但不知道如何实现这一
编辑:我看没有这个太大的兴趣,所以让我尝试用更简单的问题。你通常如何通过关系获得国际领域?例如,我怎样才能拨打$user->Products
并获得加载翻译的产品?
谢谢,但是你的建议可以在没有DAO的情况下完成。只需声明ProductTable类,并添加与Translation进行连接的getXy方法。无论如何,它不能解决问题,因为我仍然无法访问这些字段与$ product-> name,但$ product-> Translation ['en'] - >名称 – ZolaKt 2011-05-04 12:59:25
您不能通过'产品“模型,因为它不在此模型中描述(并且不存在于数据库表中)。使用我的方法您可以在一个对象(Doctrine_Collection中)中获得所有列 - 并且可以为一个具体的翻译。因此循环遍历'$ products = DAO :: get('Some \ Namespace \ Product') - > getProducts(array('lang'=> 1));'用这种方式'foreach($ products as $ product){。 ..您可** **恕我直言访问'产品 - >名称'。你不能吗? – shadyyx 2011-05-04 13:44:15
嗯...我不认为你仍然可以访问它,就像你说的那样,它没有在模态中描述。我能做的就是将它水合为数组,并重新排列结果(移除翻译,并将名称向上传播一层)。这是我现在使用的。但是,仍然看不到您的方法与Table类中的正常定义方法相比有什么不同 – ZolaKt 2011-05-04 14:21:15