Wie aktualisiere ich eine „Eins-zu-Viele“-Beziehung in Laravel?(kann es nicht in den Dokumenten finden)
Frage
<?php
class User extends Eloquent {
public function tickets()
{
return $this->hasMany('Tickets')
}
}
class Tickets extends Eloquent {
public function User()
{
return $this->belongTo('User')
}
}
//and how to update a Ticket that belongs To User?
// and this dosen't work...Who can tell me the reason ,thanks !
$ticket = User::find(1)->tickets()->where('type','sometype')->get();
$ticket.update(array('status' => 0));
Lösung
Der update()
Die Abfrage ist ganz klar in der dokumentiert offizielle Dokumente:
User::find(1)->tickets()->where('type','sometype')->update(array('status' => 0));
Ich vermute, das Problem, das Sie haben, ist, dass get()`-Abfrage kehrt zurück mehrere Aufzeichnungen.Damit Ihre Abfrage funktioniert, müssen Sie den zurückgegebenen Wert als Sammlung von Datensätzen behandeln und dann jeden Datensatz einzeln iterieren und bearbeiten.
$tickets = User::find(1)->tickets()->where('type','sometype')->get();
foreach ($tickets as $ticket) {
$ticket->update(array('status' => 0));
}
Beachten Sie, dass die korrekte Syntax zum Aufrufen einer Eloquent-Methode einen vorangehenden Pfeil erfordert ->
– nicht ein Punkt (.
).
$record.update(array('foo' => 'bar')); # Incorrect
$record->update(array('foo' => 'bar')); # CORRECT!
AKTUALISIEREN:
Modellnamen sollten immer vorhanden sein Singular, nicht Plural.deshalb, die Ticket
Das Modell sollte wie folgt definiert werden:
class Ticket extends Eloquent { // `Ticket`, not `Tickets`
public function User()
{
return $this->belongTo('User')
}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow