سؤال

أقوم بإنشاء تطبيق حيث يمكن للمستخدم إنشاء حقل meta لتخزين البيانات على قاعدة البيانات ، وستتلقى هذه الحقول أنواعًا مختلفة من البيانات ، مثل التواريخ أو القيم النقدية.

فكرتي الأولية لإنشاء هذه الحقول هي المتجر في جدول قاعدة البيانات (على سبيل المثال: 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 تطبيق؟ قام شخص ما بإنشاء سلوك EAV لـ YII في Yiiext ، هنا (لم أستخدمها). EAV معقدة و (في كثير من الأحيان) غير فعالة بعض الشيء (الكثير من الوصلات!) ، ولكن هذا هو الطريق للذهاب إذا كنت تريد رقم تعسفي ونوع الحقول المرفقة بـ DB "صف".

نصائح أخرى

في الأساس ما تحتاج إلى إنجازه هنا هو فئة قاعدة ActivereCord مخصصة. إذا نظرت إلى CactivereCord ، فسترى أنه يسترجع جميع أنواع معلومات التعريف من قاعدة البيانات المفضلة لديك. لأنه في حالتك ، تكون معلومات التعريف في جدول ، ستحتاج إلى إنشاء فئة قاعدة ActivereCord مخصصة تتعامل مع ما يفعله CactivereCord.

لاحظ أنه مع جدول التعريف المخصص مثل الجدول الذي تصفه أعلاه ، لن يكون من السهل إجراء عمليات البحث العادية والمجموعات.

ألن يكون الأمر أسهل بالنسبة لك إذا كنت تستخدم جدولًا بسيطًا يحتوي على معرف وقيمة حيث تحتوي القيمة على بيانات 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