Вопрос

Я создаю приложение, в котором пользователь сможет создать Meta Field для хранения данных в базе данных, это поля получит различные виды данных, такие как даты или денежные значения.

Моя начальная идея Чтобы создать эту область, это хранилище в таблице базы данных (например, META_Fields), имя, значение и проверки этого поля.

После во времена использования его на приложении я собираюсь расширить методы AR __get и __set, чтобы использовать поле имени как атрибута.

Пример:

Если на моем столе Meta_fields у меня есть это значения:

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

Я намерен использовать в моих взглядах и контроллерах, как это:

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

Теперь вопросы:

1 - Как я могу использовать такие поля для хранения значений и восстановления его? 2 - Как я могу пользователю разные валидации к этому полям? Так как я храним массив проверки в качестве сериализованных значений в базе данных?

Спасибо.

Это было полезно?

Решение

Может быть, вы должны посмотреть в Воображение реализация? Кто-то создал поведение EAV для Yii в Yiiext, здесь (Я не использовал его). EAV сложен и (часто) немного неэффективно (множество присоединений!), Но это путь, если вы хотите иметь произвольное число и тип полей, прикрепленных к DB «ROW».

Другие советы

В основном то, что вам нужно выполнить здесь, является пользовательским базовым классом ActiveRecord. Если вы посмотрите на CACTiverecord, вы увидите, что он извлекает все виды метаинформации из вашей базы данных выбора. Поскольку в вашем случае мета-информация находится в таблице, вам нужно будет создать пользовательский базовый класс ActiveRecord, который обрабатывает то, что делает CAITAVERCORD.

Обратите внимание, что с пользовательской метатой, такой как тот, который вы описываете выше, не будет легко выполнять обычные операции поиска и групп.

Разве это не было бы легче для вас, если вы используете простую таблицу с идентификатором и значением, где значение содержит данные JSON?

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

А потом что-то вроде:

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

Посмотрите на это расширение. Он имеет реализацию того, что вам нужно для профильных полей.http://www.yiiframework.com/extension/yii-user-management.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top