特定の配列からいくつかのjson形式のデータをデータベースに保存したい。しかし、私はコントローラを使用してそれを保存する方法。
次のようなjsonデータがあるとします。
{"id":"bangladesh","divisions":[{"name":"Barisal"},{"name":"Chittagong"},{"name":"Dhaka"},{"name":"Khulna"},{"name":"Rajshahi"},{"name":"Rangpur"},{"name":"Sylhet"}]}
私がコントローラで知っている限りでは、json形式を使用すると、私はそれを完全に認識していないため、このようになります。
public function saveUser(Request $request)
{
$div=new Div();
$user->json = json_encode( array({"Date 1": {
{"id":"bangladesh","divisions":[{"name":"Barisal"},{"name":"Chittagong"},{"name":"Dhaka"},{"name":"Khulna"},{"name":"Rajshahi"},{"name":"Rangpur"},{"name":"Sylhet"}]}
$div->save();
return redirect('getList');
}
Laravel Controllerを使用して、部門モデルの部門リストのみをmySQLに保存するにはどうすればよいですか?
自分で配列データをJSON文字列に変換する必要はありません。モデルでLaravel $ castsパラメーターを使用してください: https://laravel.com/docs/5.2/eloquent-mutators#attribute-casting
Divモデルで次のようにする必要があります。
protected $casts = [
'divisions' => 'array',
];
モデルを$model->toJson();
のようなJSON形式に変換できます
または
配列にデータがある場合は、json_encode(['id' => 1, 'name' => 'User 1']);
を使用できます
LaravelスキーマはJSONフィールドタイプもサポートしています https://laravel.com/docs/5.0/schema#adding-columns
JSONデータを格納するためにtext
フィールドタイプも使用できます。
モデルを設定する
protected $casts = [
'list' => 'array'
];
完全なコードは次のとおりです。
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'primary_id',
'list'
];
protected $casts = [
'list' => 'array'
];
public function setMetaAttribute($value)
{
$list = [];
foreach ($value as $array_item) {
if (!is_null($array_item['key'])) {
$list[] = $array_item;
}
}
$this->attributes['list'] = json_encode($list);
}