2017-12-15 7 views
2

Sieht aus wie das ist nicht die neue Frage. Aber ich habe keine wirkliche Lösung gefunden. Hier mein Code ist es zu erwarten funktioniert:PHP Laravel save() aktualisiert Datensatz

$update_pet=pets::where("pet_id",$pet['pet_id'])->get(); 
if($update_pet->count()>0){ 
    $update_pet=$update_pet->first(); 
    $update_pet->pet_breed_id=$pet_new['pet_breed_id']; 
    $update_pet->save(); 
} 

Ich bin sicher, dass $ pet [ 'pet_id'] und $ pet_new [ 'pet_breed_id'] hat Wert. Und ich bin sicher, dass die Tabelle pet_breeds in der Datenbank den Primärschlüssel als pet_id hat. Das System kann die Datenbank verbinden, da ich die pet_id und die neue pet_breed_id bekommen kann. Und ich bin sicher, dass ich den Tabellennamen und den primaryKey-Wert im Modell überschrieben habe.

class pets extends Model 
{ 
    protected $table="pets"; 
    protected $primaryKey="pet_id"; 
} 

Und es aktualisiert nicht einmal. Per sofort verwende ich direkt DB :: update(), um die Update-Abfrage zu starten, um das Problem zu lösen. Aber ich möchte immer noch wissen, warum es passiert? Oder ist es etwas falsch in der Codierung? Oder die Speicherfunktion kann jetzt nicht in der Aktualisierungssituation verwendet werden?

Antwort

1

versuchen, ein Objekt statt Sammlung zu erhalten:

$pet = pets::find($pet['pet_id']); 

if (!is_null($pet)) { 
    $update_pet->pet_breed_id = $pet_new['pet_breed_id']; 
    $update_pet->save(); 
} 

Also, stellen Sie sicher, dass Sie, indem dd($pet); direkt nach der ersten Zeile des Codes das richtige Objekt zu bekommen.

+1

ich getestet habe es passen perfekt gearbeitet. Danke vielmals.^_ ^ –

0

Sie verwenden get-Methode, die Ihnen das Ergebnis als Array gibt, also tun Sie das nicht mit der ersten Methode. Wenn pet_id Ihr Primärschlüssel ist.

und was ist das Zeug Sie tun $ update_pet-> first() in Zeile Nr. 3.

2

Warum die Dinge kompliziert machen?

pets::find($pet['pet_id'])->update(['pet_breed_id' => $pet_new['pet_breed_id']]); 

Auch entweder umfassen folgende Zeile:

protected $guarded = []; 

oder diese:

protected $fillable = ['pet_breed_id']; 

in Ihre Haustiere Modellklasse.

Eine letzte Sache, sollten Sie alle Ihre Klassen Namen mit Kapital beginnen. Und Modellnamen sollten kein Plural sein. So ...

1

Sie müssen nur ändern get() zu ersten(), so dass es nur eine Daten zurückgibt.

$update_pet=pets::where("pet_id",$pet['pet_id'])->first(); 
if($update_pet->count()>0){ 
    $update_pet=$update_pet->first(); 
    $update_pet->pet_breed_id=$pet_new['pet_breed_id']; 
    $update_pet->save(); 
}e 

Oder wenn Sie alle müssen den Datensatz aktualisieren, die mit dem Zustand, verwenden foreach

$update_pet=pets::where("pet_id",$pet['pet_id'])->get(); 
foreach ($update_pet as $pet) { 
    if($pet->count()>0){ 
     $pet=$update_pet->first(); 
     $pet->pet_breed_id=$pet_new['pet_breed_id']; 
     $pet->save(); 
    } 
} 
Verwandte Themen