Domanda

Sto creando un'applicazione dove l'utente sarà in grado di creare meta campo per memorizzare i dati sulla base di dati, che questi campi riceveranno diversi tipi di dati, come date o valori monetari.

La mia idea iniziale per creare questa immagine che questi campi è il negozio in una tabella di database. (Es: meta_fields), il nome, il valore e le convalide di questo campo

Dopo il tempo di utilizzo su app, ho intenzione di estendere l'AR metodi __get e __set di utilizzare il campo del nome come un attributo.

Esempio:

Se sul mio tavolo meta_fields ho questi valori:

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

Ho intenzione di utilizzare nelle mie opinioni e controller simile al primo:

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

Ora le domande sono:

1 - Come posso usare questo tipo di campi di valore e di recupero è negozio? 2 - Come posso utente diversi tipi di validazione per questi campi? Da quando ho memorizzare la matrice convalide come valori serializzato sul database?

Grazie.

È stato utile?

Soluzione

Forse si dovrebbe guardare in un href="http://en.wikipedia.org/wiki/Entity-attribute-value_model" rel="nofollow"> EAV implementazione ? Qualcuno ha creato un comportamento EAV per Yii nel YiiExt, qui (io non l'ho usato). EAV è complicato e (spesso) un po 'inefficiente (un sacco di si unisce!), Ma è la strada da percorrere se si vuole avere un numero arbitrario e il tipo di campi collegati a una "riga" DB.

Altri suggerimenti

In sostanza ciò che è necessario per realizzare qui è una classe base ActiveRecord personalizzata. Se si guarda a CActiveRecord vedrete che recupera tutti i tipi di meta-informazioni dal database di scelta. Dal momento che nel tuo caso la meta-informazioni è in una tabella si avrebbe bisogno di creare una classe di base ActiveRecord personalizzata che maniglie ciò CActiveRecord fa.

Si noti che con un tavolo meta personalizzato come quello che lei descrive di cui sopra non sarà facile fare le normali operazioni di ricerca e gruppi.

Non sarebbe più facile per voi se si utilizza una semplice tabella con id e il valore in cui il valore contiene i dati JSON?

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

e qualcosa poi, come:

$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();

dare un'occhiata a questa estensione. Ha implemenation di quello che serve per i campi del profilo. http://www.yiiframework.com/extension/yii-user-management

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top