我正在开发一个带有数据库的 Yii 项目,其中包含一个表,其中几乎所有的数据都以 JSON 格式保存在一个字段中(这很疯狂,但事实就是如此):
id INTEGER
user_id INTEGER
data LONGTEXT
此“JSON 字段”data
具有以下结构,其中包含图像:
{
"id":"1",
"foo":"bar",
...
"data":{
"baz":"buz",
...
}
}
显示它没问题,但现在我想让数据可食用。我的表格如下所示:
<?php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'my-form',
'htmlOptions' => array('enctype' => 'multipart/form-data'),
'enableAjaxValidation'=>false,
));
?>
<div class="row">
<?php echo $form->labelEx($model, 'foo'); ?>
<?php
echo $form->textField($model, 'foo', array(...));
?>
<?php echo $form->error($model, 'foo'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model, 'baz'); ?>
<?php
echo $form->textField($model, 'data[baz]', array(...));
?>
<?php echo $form->error($model, 'data[baz]'); ?>
</div>
有用。但是有多个问题,似乎是由同一件事引起的——他的表单字段没有引用到模型属性/属性:
当我创建字段
foo
和baz
必需public function rules() { return array(array('foo, baz', 'required')); }
的( -- 属性$foo
已定义)foo
时,如愿以偿,但baz
会导致“ foo不能为空”错误。所以我不能设置 adata[*]
asrequired
。如果表单无效并重新加载,则所有
data[*]
字段均为空。这些
data[*]
字段未标记为必填项。
有没有在不改变数据结构的情况下解决这个问题?不会有正确的方法,但也许是一种解决方法。