好吧,我可能有点晚了,但无论如何......
1)Cake 在获取一行时使用 INNER JOIN 并且它是相关的翻译,所以基本上没有简单的方法解决这个问题。您必须确保每次都保存每个可翻译字段 - 即使您只是将其保存为空白。唯一的选择是绕过核心使其使用左连接而不是内连接 - 但不要这样做。
2)食谱解释了如何在这里获取所有记录:http: //book.cakephp.org/2.0/en/core-libraries/behaviors/translate.html#retrieve-all-translation-records-for-a-field
现在,可能大多数时候您只想获得一个翻译,因此您不想修改模型中 $actsAs['Translate'] 数组的定义。所以我所做的是在 AppModel.php 中设置了一个方法,它可以即时修改 $actsAs['Translate'] 数组:
/*
* See http://book.cakephp.org/2.0/en/core-libraries/behaviors/translate.html#using-the-bindtranslation-method
* This is for making it so we fetch all translations, as opposed to just that of the current locale.
* Used for eg. editing (multiple translations) via the admin interface.
*/
public function bindAllTranslations(){
$translatableFields = $this->actsAs['Translate'];
$keyValueFields = array();
foreach($translatableFields as $field){
$keyValueFields[$field] = $field.'Translation';
}
$this->bindTranslation($keyValueFields,false); // false means it will be changed for all future DB transactions in this page request - and won't be reset after the next transaction.
}
因此,如果它是一个管理方法(或任何其他您想要所有翻译的情况),您在查找之前调用该代码:
$this->MyModel->bindAllTranslations();
$this->MyModel->find('all');
希望有帮助!