1

私はTranslateBehavior2つのフィールドで使用します:

  • 名前
  • ナメクジ

フィールドのコンテンツは に保存されるため、これらのフィールドをモデルから削除しますi18n table。それは完全に機能しますが、私が使用しているアプリで$this->Model->hasField('name')モデルテーブルからフィールドを削除すると、この関数は常に false を返します。何か解決策はありますか?

4

1 に答える 1

2

仮想フィールド

変換動作では仮想フィールドが使用されます。たとえば、存在しないhasFieldフィールドをクエリすると、フィールドが物理的に存在しないため、正しく false が返されます。

hasField + Translate の動作は決して「機能」しません

変換動作は、クエリの前に必要に応じて仮想フィールド定義を作成し、クエリの後にそれらを破棄します。そのため、hasField の 2 番目のパラメーターをそのまま使用することはできません。変換動作のbeforeFindメソッドとafterFindメソッドの間で呼び出すことができない限り、結果は常に false になります。

$willAlwaysBeFalse = $this->hasField('name', true);

代替案

あなたができることがいくつかあります。

  • hasField をオーバーライドして、これらのほぼ仮想の翻訳されたフィールドに対して true を返すようにします
  • hasFielddo の 2 番目の引数で肯定応答を取得できるように、変換されたフィールドのダミー仮想フィールドを定義します。
  • 未使用の翻訳済みフィールドを削除しないでください - そのため、hasField常に true を返します

最も簡単な解決策は、フィールドを削除しないことです。これにより、データが空白であっても、変換動作が無効になっている場合や何らかのエラーが存在する場合でもモデルが機能することが保証されます。

于 2013-01-27T15:56:54.420 に答える