Como atualizar uma relação “um para muitos” no Laravel?(não consigo encontrar nos documentos)
Pergunta
<?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));
Solução
O update()
consulta está documentada claramente no documentos oficiais:
User::find(1)->tickets()->where('type','sometype')->update(array('status' => 0));
Suspeito que o problema que você está tendo é que o consulta get()` está voltando múltiplo registros.Para que sua consulta funcione, você precisará tratar o valor retornado como uma coleção de registros e, em seguida, iterar e operar em cada registro individualmente.
$tickets = User::find(1)->tickets()->where('type','sometype')->get();
foreach ($tickets as $ticket) {
$ticket->update(array('status' => 0));
}
Observe que a sintaxe correta para invocar um método Eloquent requer uma seta anterior ->
– não um ponto (.
).
$record.update(array('foo' => 'bar')); # Incorrect
$record->update(array('foo' => 'bar')); # CORRECT!
ATUALIZAR:
Os nomes dos modelos devem sempre ser singular, não plural.Portanto, o Ticket
modelo deve ser definido da seguinte forma:
class Ticket extends Eloquent { // `Ticket`, not `Tickets`
public function User()
{
return $this->belongTo('User')
}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow