Laravel Backpack不更新JSON字段

时间:2017-03-06 11:52:44

标签: laravel laravel-5.4 backpack-for-laravel

我的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" />&nbsp;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列,因此旧值仍然存在。

如何更新此列的值?

1 个答案:

答案 0 :(得分:0)

所以我发现,我的crud控制器上的update方法没有将更新的请求传递给updateCrud的{​​{1}}方法。我所要做的就是传递更新的请求。

CrudController中的update方法现在看起来像这样:

ProductCrudController