2017-03-15 6 views
0

私はCakePHP 3.4を使用していますが、スペイン語(es)がデフォルトのロケールであるデュアル言語のWebサイトで使用しています。私は、フィールドslugためTranslateBehaviorを実装MangasTableを持っていると私は次のようである、それを照会しようとしている:TranslateBehaviorはデフォルトのロケールではデフォルトのフィールドを使用しません

$manga = $this->Mangas->find() 
    ->select([ 
     'id', 
     'nombre' 
    ]) 
    ->where([$this->Mangas->translationField('slug') => $slug]) 
    ->firstOrFail(); 

点であり、一部$this->Mangas->translationField('slug')がために私に翻訳エイリアスフィールドを取得しますスラグ。多かれ少なかれ、Mangas_slug_translation.content。それは英語としてローカライズされても問題ありませんが、デフォルトのスペイン語では、この言語のi18nテーブルにエントリがないため、何も返しません。ポーランド人のアプローチは、言語の条件があり、それを$field変数に割り当てることですが、それはあまりうまく見えません。

他の方法がありますか、何か不足していますか?

答えて

1

ポーラーマンのアプローチは、言語の条件があり、それを$field変数に割り当てることですが、それはあまりうまく見えません。

データが取得された後に元のフィールドが置換され、適切なフィールドを特定する変換動作に機能がないとすれば、それはあなたがしなければならないことですフィルタリングのために。 DRYnessのモデルレイヤー(テーブル、カスタム/拡張動作)のどこかにロジックを隠すことができますが、一般的にAFAICTの周りにはその方法がありません。

open an issueとし、拡張機能を提案することもできます。現在のロケールに応じて適切なフィルタリングフィールドを返す追加のメソッドが、translationField()メソッドを補完する可能性があります。

関連する問題