わかりました、少し遅れるかもしれませんが、とにかく...
1) Cake は、行をフェッチするときに INNER JOIN を使用し、それに関連付けられた翻訳であるため、基本的にこれを回避する簡単な方法はありません。空白として保存する場合でも、翻訳可能なすべてのフィールドを毎回保存する必要があります。唯一の代替手段は、内部結合ではなく左結合を使用するようにコアをハッキングすることですが、そうしないでください。
2) クックブックでは、ここですべてのレコードを取得する方法について説明しています: http://book.cakephp.org/2.0/en/core-libraries/behaviors/translate.html#retrieve-all-translation-records-for-a-field
さて、おそらくほとんどの場合、翻訳を 1 つだけ取得したいので、モデル内の $actsAs['Translate'] 配列の定義を変更したくないでしょう。だから私がしたことは、その場で $actsAs['Translate'] 配列を変更する AppModel.php のメソッドを設定することでした:
/*
* 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');
それが役立つことを願っています!