MySQL テーブルに TEXT 列があり、JSON オブジェクトを文字列として入力して、行ごとに保存するエントリのオプションを定義できるようにします。
まだオプションが 1 つしかないので、値が のチェックボックスを 1 つだけ表示します1
。フォームが送信されると、リクエストを介して入力を検証します。使用可能な値が常に存在することを確認するために、入力が存在するかどうかを確認し (チェックボックスであることを思い出してください)、存在しない場合は、オプションを に設定して事前入力します0
。しかし、phpMyAdmin を見ると、古い値が残っています。
ここにコードによる例があります-私は英語で自分自身を説明するのが得意ではありませんでした:P
形
<label for="dedication" style="font-weight: normal;"><input id="dedication" type="checkbox" name="fields[dedication]" value="1" /> Dedication</label>
Request::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
列は上書きされないため、古い値が残ります。
この列の値を更新するにはどうすればよいですか?