Comment mettre à jour une relation « un à plusieurs » dans Laravel ?(je ne le trouve pas dans la documentation)

StackOverflow https://stackoverflow.com//questions/22003280

  •  20-12-2019
  •  | 
  •  

Question

<?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));
Était-ce utile?

La solution

Le update() la requête est documentée assez clairement dans le documents officiels:

User::find(1)->tickets()->where('type','sometype')->update(array('status' => 0));

Je soupçonne que le problème que vous rencontrez est que le requête get() revient plusieurs enregistrements.Pour que votre requête fonctionne, vous devrez traiter la valeur renvoyée comme une collection d'enregistrements, puis itérer et opérer sur chaque enregistrement individuellement.

$tickets = User::find(1)->tickets()->where('type','sometype')->get();
foreach ($tickets as $ticket) {
    $ticket->update(array('status' => 0));
}

Notez que la syntaxe correcte pour appeler une méthode Eloquent nécessite une flèche précédente ->pas un point (.).

$record.update(array('foo' => 'bar'));   # Incorrect
$record->update(array('foo' => 'bar')); # CORRECT!

MISE À JOUR:

Les noms de modèles doivent toujours être singulier, pas pluriel.Par conséquent, la Ticket Le modèle doit être défini comme suit :

class Ticket extends Eloquent { // `Ticket`, not `Tickets`
    public function User()
    {
        return $this->belongTo('User')

    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top