Donnerstag, Februar 27, 2020

Laravel Eloquent ORM sparen: update vs erstellen

Ich habe eine Tabelle und ich versuche, die save() Methode zum aktualisieren/erstellen von Linien. Das problem ist, dass es immer wieder neue Linien. Der folgende code gibt mir über 12 Zeilen jedes mal, wenn ich ihn laufen. Sie don ‚ T haben eine einzigartige id vor dem einfügen, aber die Kombination von name und DateTimeCode ist einzigartig. Gibt es eine Möglichkeit, diese zu benutzen, zwei um laravel zu erkennen, dass Sie exist()? Sollte ich in Erwägung ziehen if exist mit create und update statt?

foreach ($x as $y) {
    $model = new Model;
    $model->name = ''.$name[$x];
    $model->DateTimeCode = ''.$DateTimeCode[$x];
    $model->value = ''.$value[$x];
    $model->someothervalue = ''.$someothervalue[$x];
    $model->save();
};
InformationsquelleAutor Wistar | 2013-10-30

2 Kommentare

  1. 4

    Ich denke, dass in diesem Fall müssen Sie suchen, bevor Sie aktualisieren oder erstellen:

    foreach ($x as $y) {
        $model = Model::where('name', name[$x])->where('DateTimeCode', DateTimeCode[$x])->first();
    
        if( ! $model)
        {
            $model = new Model;
            $model->name = ''.name[$x];
            $model->DateTimeCode = ''.DateTimeCode[$x];
        }
    
        $model->value = ''.$value[$x];
        $model->someothervalue = ''.$someothervalue[$x];
        $model->save();
    };
    • Funktioniert Super!!
    • Jetzt, eine bessere Lösung sein könnte, firstOrCreate.
  2. 5

    Ich nehme an, dies wäre in laravel 4.x:

     foreach ($x as $y) {
        $model = Model::firstOrCreate(array('name' => name[$x], 'DateTimeCode' => DateTimeCode[$x]));
        $model->value = ''.$value[$x];
        $model->someothervalue = ''.$someothervalue[$x];
        $model->save();
    };
    • ++ für firstOrCreate

Kostenlose Online-Tests