Laravel Store JSON
In MySQL ist es möglich JSON-Daten in eine Datenbank-Feld zu speichern. Die Daten können dann z.B. in einer Where-Abfrage verwendet werden.
Hier ein kurzer Test mit einer Datenbank mit einer JSON-Spalte:
Migration
für den Test:
Schema::create('json', function (Blueprint $table) {
$table->bigIncrements('id');
$table->json('data');
$table->timestamps();
});
DB
Insert:
\DB::table("json")->insert(['data' => '{"heating":"22","testkey":"testvalue"}'])
Read: where query:
\DB::table("json")->where('data->heating','22')->get()
Update:
\DB::table("json")->where('data->heating','22')->update(['data->heating' => '23'])
Model
cast
Um Json in einem Eloquent-Model verwenden zu können, kann dieses im Model gecasted werden:
class Schedule extends Model
{
use HasFactory;
protected $casts = [
'param_props' => 'array'
];
Model UpdateOrCreate
json::updateOrCreate([
'type' => 'weather_day',
'scope' => $day],[
'data' => json_encode(array(
'count_R' => $count_r,
'sum_H_min' => $count_h,
'sum_W_min' => $count_w,
'sum_U_min' => $count_u,
'sum_S_min' => $count_s,
'sum_0_min' => $count_0
))
]
);
Foreach
Lesen der Einträge in einer foreach, als Alternative zum Key-Value-Beispiel: Laravel Key Value Datenbank
$heating_days = json::where('type','heating_day')->orderBy('scope', 'DESC')->get();
foreach ($heating_days as $day => $heating_day) {
$heating_day_data = json_decode($heating_day->data);
$PowerStats4ViewDay[ $day ]['R']=$heating_day_data->count_R ?? 0 ;
({{pro_count}})
Beitrag bewerten:{{percentage}} % positiv
({{con_count}})