データベースの[〜#〜] json [〜#〜]列を更新したいのですが、次のエラーが発生します:
Array to string conversion
モデルで列名をarray
として宣言しました。
protected $casts = [
'destinations' => 'array'
];
これは私が使用するコードです:
$data[] = [
'from' => $fromArray,
'to' => $toArray
];
Flight::where('id', $id)->update(['destinations' => $data]);
私は何をすべきか ?
Githubでのこの会話によると: モデルフィールドが入力可能である場合はjson属性を入力可能にする テイラーオトウェルはsave
メソッドの使用を推奨しています:
$ model-> options = ['foo' => 'bar'];
$ model-> save();
だからあなたの場合、あなたはこのようにそれを行うことができます:
$flight = Flight::find($id);
$flight->destinations = $data;
$flight->save();
基本的に生のSQLクエリを作成するだけのクエリビルダーを使用してモデルを更新しようとしているため、このエラーが発生します。モデル内で定義されているデータキャストなどは認識されません。したがって、次の3つの選択肢があります。
1)モデルを見つけて、モデルインスタンスで更新を実行します。
$flight = Flight::findOrFail($id);
$flight->update(['destinations' => $data]);
2)更新する前にデータを文字列に変換します。
$data = json_encode($data);
Flight::where('id', $id)->update(['destinations' => $data]);
3)@AmrAlyの提案に従って、JSON列クエリをサポートするデータベースを使用します。すべてのデータベースがJSON列をサポートしているわけではないため、このオプションに注意してください。