0

スキーマを変更できない既存の SQL テーブルがあり、そのための Lithium データ モデルを作成したいと考えています。問題は、1 つの列に特殊文字で区切られた複数の「フィールド」が含まれていることです。

例えば

data = "username|email|age"

私はする必要があります:

  • 行が読み取られた後に列の値を分割し、「仮想」属性を作成します
  • これらの仮想属性に割り当てることができます
  • 仮想属性を結合して、保存する前に有効な列値を作成します
  • 仮想属性のバリデーターを作成する
  • html->form を使用して、仮想属性のフォーム フィールドを作成します。

これを行う方法を理解しようとしましたが、簡単な方法はないようです。難しい方法でもありません:)何かアイデアはありますか?

4

1 に答える 1

1

Lithium では、そのままでは魔法の仮想属性はサポートされていません。これについては、進行中の作業と議論がhttps://github.com/UnionOfRAD/lithium/pull/569にあります。

とはいえ、この問題はモデルのインスタンス メソッド + 保存と検索のフィルターでほぼ解決できます。

  • 読み取り後にエンティティにusernameemailおよび属性を設定する検索後フィルタ。age
  • dataエンティティを保存する前にこれらの属性を属性に結合する保存前フィルター、および unset usernameemailおよびage(それらを保存しないようにするため)。

たぶん、Modelインスタンスメソッドも必要になるでしょう

public function username($entity) {
      /* split here $entity->data by "|" and keep only what do you want */
      return $username;
}

次に、どこでも $user->username() を呼び出して、ユーザー名のみを取得できます。

この機能が Lithium で出荷されるまで、これで問題は解決するはずです。

于 2012-07-30T11:30:29.810 に答える