¿Cómo actualizar una relación “uno a muchos” en Laravel?(no puedo encontrarlo en los documentos)
Pregunta
<?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));
Solución
El update()
La consulta está documentada con bastante claridad en el documentos oficiales:
User::find(1)->tickets()->where('type','sometype')->update(array('status' => 0));
Sospecho que el problema que tienes es que el obtener()` consulta esta regresando múltiple registros.Para que su consulta funcione, deberá tratar el valor devuelto como una colección de registros, luego iterar y operar en cada registro individualmente.
$tickets = User::find(1)->tickets()->where('type','sometype')->get();
foreach ($tickets as $ticket) {
$ticket->update(array('status' => 0));
}
Tenga en cuenta que la sintaxis correcta para invocar un método Eloquent requiere una flecha anterior ->
– no un punto (.
).
$record.update(array('foo' => 'bar')); # Incorrect
$record->update(array('foo' => 'bar')); # CORRECT!
ACTUALIZAR:
Los nombres de los modelos siempre deben ser singular, no plural.Por lo tanto, la Ticket
El modelo debe definirse de la siguiente manera:
class Ticket extends Eloquent { // `Ticket`, not `Tickets`
public function User()
{
return $this->belongTo('User')
}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow