Q
Yii鍵值表
1
A
回答
3
退房此鏈接: http://www.yiiframework.com/doc/guide/1.1/en/form.table
這被認爲是最好的形式Yii中更新創建多個模型。
實質上,爲了創建,您可以創建一個for循環,生成您希望可見的許多輸入,並在您的控制器中循環輸入以創建新模型。
查看文件:
for ($settings as $i=>$setting) //Settings would be an array of Models (new or otherwise)
{
echo CHtml::activeLabelEx($setting, "[$i]key");
echo CHtml::activeLabelEx($setting, "[$i]key");
echo CHtml::error($setting, "[$i]key");
echo CHtml::activeTextField($setting, "[$i]value");
echo CHtml::activeTextField($setting, "[$i]value");
echo CHtml::error($setting, "[$i]value");
}
控制器actionCreate:
$settings = array(new Setting, new Setting, new Setting);
if (isset($_POST['Settings']))
foreach ($settings as $i=>$setting)
if (isset($_POST['Setttings'][$i]))
{
$setting->attributes = $_POST['Settings'][$i];
$setting->save();
}
//Render View
要更新現有的模型,你可以用同樣的方法,但不是創造新的模型,你可以加載基於模型$ _POST ['Settings']數組中的鍵。
要回答關於將3個模型傳遞給視圖的問題,可以在不傳遞它們的情況下完成,但要驗證數據並將正確的錯誤消息發送到視圖,您應該將放入數組的三個模型傳遞給在數組中查看。
注:上面的示例應該工作原樣,但不提供任何驗證,該模型是有效的,或者他們正確保存
2
我要給你擡起頭,讓你知道這可能會讓你的生活變得非常複雜。我目前使用類似這樣的鍵值,並在這裏的EAV
圖案表
對事物的名單,你會發現很難或不可能:
- 使用
CDbCriteria
mergeWith()過濾的「價值相關的元素「S在搜索的情況下,()(或其它) - 過濾
CGridView
或CListView
如果這只是很簡單的鍵值沒有相關實體ASPEC T(我猜這是因爲它看起來像設置),然後做這將是一個辦法:
- 創建一個普通的「設置」
CActiveRecord
爲您設置表(你會使用這個條目保存到您的設置表) - 通過擴展
CFormModel
來創建表單模型,並將其用作表單中的$模型。 - 將Save()方法添加到Form模型中,該模型將使用「設置」模型單獨插入鍵值對。優選地,使用鍵值對中的事務不會傳遞設置 - >驗證()(如果適用)
- (可選地,如果用戶想要編輯,您可能希望覆蓋表單模型的
getAttributes()
以返回db數據一個條目。
我希望這已經夠清楚了。 讓我給你一些基本的代碼設置。請注意,我還沒有測試過這個。它應該給你一個粗略的想法:雖然
設置型號:
class Setting extends CActiveRecord
{
public function tableName()
{
return 'settings';
}
}
SettingsForm型號:
class SettingsForm extends CFormModel
{
/**
* Load attributes from DB
*/
public function loadAttributes()
{
$settings = Setting::model()->findAll();
$this->setAttributes(CHtml::listData($settings,'key','value'));
}
/*
* Save to database
*/
public function save()
{
foreach($this->attributes as $key => $value)
{
$setting = Setting::model()->find(array('condition'=>'key = :key',
'params'=>array(':key'=>$key)));
if($setting==null)
{
$setting = new Setting;
$setting->key = $key;
}
$setting->value = $value;
if(!$setting->save(false))
return false;
}
return true;
}
}
控制器:
public function actionSettingsForm()
{
$model = new Setting;
$model->loadAttributes();
if(isset($_POST['SettingsForm']))
{
$model->attributes = $_POST['SettingsForm'];
if($model->validate() && $model->save())
{
//success code here, with redirect etc..
}
}
$this->render('form',array('model'=>$model));
}
表單視圖:
$form=$this->beginWidget('CActiveForm', array(
'id'=>'SettingsForm'));
//all your form element here + submit
//(you could loop on model attributes but lets set it up static for now)
//ex:
echo $form->textField($model,'fieldName'); //fieldName = db key
$this->endWidget($form);
如果你想在一個點(代碼等)進一步澄清讓我知道。
PS:爲子孫後代,如果其他人想知道這件事,他們EAV可以檢查EAV behavior extention或選擇更合適的DB系統,如MongoDb(也有少數的一些推廣在那裏)或HyperDex
相關問題
- 1. Yii Framework 2.0主鍵的重複鍵值
- 2. Yii的外鍵
- 3. Yii外鍵
- 4. 關係的Yii ActiveRecord的用於表複合具有NULL鍵值
- 5. Yii chtml:listData數據庫中有1個鍵值和2個值
- 6. Yii dataprovider值
- 7. TinMce值Yii中
- 8. 鍵/值表
- 9. Yii - 外鍵 - 訪問數據
- 10. Yii複合主鍵與isNewRecord
- 11. Yii ActiveRecord主鍵檢索
- 12. Yii測試。截斷外鍵
- 13. Yii主鍵增加2
- 14. 得到外鍵的Yii
- 15. Yii的表單元素默認值
- 16. YII遷移和表列默認值
- 17. Yii的下拉列表默認值
- 18. 從關鍵值列表屬性鍵=值
- 19. Yii網格列值
- 20. Yii的前值EColumnsDialog
- 21. Yii Datefield默認值
- 22. 更新值Yii中
- 23. 比較表Yii
- 24. Yii Cactive表格
- 25. ASP.NET鍵/值列表
- 26. Android鍵值列表
- 27. Yii的PHP的:獲得具有關聯數組特定鍵值
- 28. Yii使用用戶標識對象分配外鍵值
- 29. 如何做一個查詢Yii中有多個主鍵值
- 30. Yii下拉列表空值作爲默認值