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  ;
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Fragen / Kommentare