我的MySQL表中有一个TEXT列,我希望用一个JSON对象填充为字符串,这样我就可以为每行保存的条目定义一些选项。
我只有一个选项,所以我只显示一个复选框,其值为1
。现在提交表单时,我通过请求验证输入。为了确保总有一个值可用,我检查输入是否存在(记住它是一个复选框),如果没有,我预先填充选项设置为0
。但是,当我看一下phpMyAdmin时,旧值仍然存在。
这里的代码示例 - 我从来没有善于在englisch中解释我的自我:P
表格
<label for="dedication" style="font-weight: normal;"><input id="dedication" type="checkbox" name="fields[dedication]" value="1" /> Dedication</label>
请求:: all()覆盖
public function all() {
// get input
$input = parent::all();
// save empty array if fields not set
if (!isset($input['fields'])) {
$input['fields'] = array("dedication" => "0");
}
$this->replace($input);
// dd(parent::all());
return parent::all();
}
模型
protected $table = 'products';
protected $primaryKey = 'id';
// public $timestamps = false;
protected $guarded = ['id'];
protected $fillable = ['product', 'description', 'price', 'campaign_id', 'quantity', 'fields'];
protected $hidden = ['created_at', 'updated_at'];
// protected $dates = [];
protected $casts = ['fields' => 'array'];
示例
假设我创建了一个产品,但未选中dedication
复选框,则会在NULL
列中保存产品,其值为fields
。通缉是{"dedication": "0"}
。
当我现在更新此条目并选中dedication
复选框时,它可以正常工作。值为{"dedication": "1"}
。
现在,如果我再次更新该条目,并且未选中复选框,则不会覆盖fields
列,因此旧值仍然存在。
如何更新此列的值?
答案 0 :(得分:0)
所以我发现,我的crud控制器上的update
方法没有将更新的请求传递给updateCrud
的{{1}}方法。我所要做的就是传递更新的请求。
CrudController
中的update
方法现在看起来像这样:
ProductCrudController