Frage

Ich erstelle eine app, wo Benutzer Meta-Feld zum Speichern von Daten auf Datenbank erstellen können, werden diese Felder unterschiedliche Arten von Daten erhalten, wie Daten oder Geldwerten.

Meine erste Idee, diese diese Felder zu erstellen, ist Speicher in einer Datenbanktabelle. (ZB: meta_fields), der Name, Wert und Validierungen dieses Feldes

Nach dem Einschalten des Zeitpunkt der Verwendung auf app, beabsichtige ich, die AR Methoden __get und __set erweitert das Namensfeld als Attribut zu verwenden.

Beispiel:

Wenn auf meinem Tisch meta_fields Ich habe diese Werte:

----------------------------------------------------
| id | name     | value      | validation          |
----------------------------------------------------
| 1  | money_en | $562,00    | some validation...  |
----------------------------------------------------
| 2  | date_crt | 2010-12-09 | some validation...  |
----------------------------------------------------

Ich beabsichtige, wie es in meinen Ansichten und Controller zu verwenden:

$model->money_en //will return $562,00

Nun die Fragen sind:

1 - Wie kann ich diese Art von Feldern zum Speichern von Werten und Erholung oder? 2 - Wie kann ich Benutzer verschiedene Arten Validierung zu diesen Bereichen? Da ich speichern Sie die Validierungen Array als serialisiert Werte auf Datenbank?

Danke.

War es hilfreich?

Lösung

Vielleicht sollte man sich in eine EAV Implementierung? Jemand erstellt ein EAV Verhalten für Yü im YiiExt, hier (ich habe es nicht benutzt). EAV ist kompliziert und (oft) ein wenig ineffizient (viele schließt sich!), Aber es ist der Weg zu gehen, wenn Sie eine beliebige Anzahl und Art der Felder zu einer DB „Reihe“ angebracht haben wollen.

Andere Tipps

Im Grunde, was Sie brauchen, hier zu tun ist eine benutzerdefinierte Activebasisklasse. Wenn Sie bei CActiveRecord betrachten, werden Sie sehen, dass es alle Arten von Meta-Informationen aus der Datenbank der Wahl abruft. Da in Ihrem Fall in einer Tabelle die Meta-Informationen müssten Sie eine benutzerdefinierte Activebasisklasse zu schaffen, die Griffe, welche CActiveRecord der Fall ist.

Beachten Sie, dass mit einer benutzerdefinierten Meta-Tabelle wie die, die Sie oben beschreiben wird nicht einfach normale Suche und Gruppen-Operationen zu tun.

Wäre es nicht einfacher für Sie, wenn Sie eine einfache Tabelle mit ID und Wert zu verwenden, wenn der Wert JSON-Daten enthält?

-------------------------------------------------------------------------
| ID | VALUE                                                            |
-------------------------------------------------------------------------
| 10 | {'name':'validation','money_en':'$100','dare_crt' :'2010-12-09'} |
-------------------------------------------------------------------------

und dann so etwas wie:

$record = MyTable::model()->findByPk(10); // or some thing like this
$arr = CJSON::decode($record->VALUE);
$arr['money_en'] == '$200';
$receord->VALUE = CJSON::encode($arr);
$record->save();

einen Blick auf diese Erweiterung. Es hat Implemenation von dem, was Sie für Profilfelder benötigen. http://www.yiiframework.com/extension/yii-user-management

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top