Pregunta

Estoy creando una aplicación donde el usuario se puede crear un campo meta para almacenar datos en la base de datos, estos campos recibirán diferentes tipos de datos, como fechas o valores monetarios.

Mi idea inicial para crear esta que estas casillas son almacenados en una tabla de base de datos. (Por ejemplo: meta_fields), el nombre, el valor y las validaciones de este campo

Después de en el momento de uso en aplicación, pretendo extender la AR métodos __get y __set de utilizar el campo de nombre como un atributo.

Ejemplo:

Si en mis meta_fields la Tabla I tiene valores de esta:

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

Tengo la intención de utilizar en mis vistas y controladores como él:

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

Ahora las preguntas son:

1 - ¿Cómo puedo utilizar este tipo de campos para almacenar valores de recuperación y que? 2 - ¿Cómo puedo usuario diferentes tipos de validación a estos campos? Dado que almaceno la matriz validaciones como valores serializados en la base de datos?

Gracias.

¿Fue útil?

Solución

Tal vez usted debe buscar en un EAV aplicación ? Alguien creó un comportamiento EAV para Yii en el YiiExt, aquí (no he usado). EAV se complica y (a menudo) un poco ineficiente (un montón de combinaciones!), Pero es el camino a seguir si usted quiere tener un número arbitrario y tipo de campos unidos a una "fila" DB.

Otros consejos

Básicamente lo que hay que lograr aquí es una clase base ActiveRecord personalizado. Si nos fijamos en CActiveRecord verá que recupera todo tipo de meta-información de su base de datos de elección. Dado que en su caso la información meta está en una tabla que tendría que crear una clase base ActiveRecord personalizado que controla lo que hace CActiveRecord.

Tenga en cuenta que con una mesa de meta personalizado como el que se ha descrito anteriormente no será fácil de hacer grupos de búsqueda y las operaciones normales.

¿No sería más fácil para usted si utiliza una tabla simple con id y el valor donde el valor contiene datos JSON?

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

y luego algo como:

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

echar un vistazo a esta extensión. Tiene implemenation de lo que necesita para los campos de perfil. http://www.yiiframework.com/extension/yii-user-management

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top