Laravel Éloquent: Comment faire pour récupérer automatiquement des relations lors de la sérialisation par toArray/toJson
J'ai les chiffres, cela fonctionne pour la récupération automatique des user
et replies
quand je suis la sérialisation d'objet JSON, mais il est primordial toArray
vraiment la bonne façon de le faire?
<?php
class Post extends Eloquent
{
protected $table = 'posts';
protected $fillable = array('parent_post_id', 'user_id', 'subject', 'body');
public function user()
{
return $this->belongsTo('User');
}
public function replies()
{
return $this->hasMany('Post', 'parent_post_id', 'id');
}
public function toArray()
{
$this->load('user', 'replies');
return parent::toArray();
}
}
Vous devez vous connecter pour publier un commentaire.
Au lieu de l'annulation de la
toArray()
à la charge de l'utilisateur et les réponses, utilisez$with
.Voici un exemple:
Aussi, vous devriez être en utilisant
toArray()
dans votre contrôleur, pas vos modèles, comme suit:Espérons que cette aide!
$with
est documenté nulle part? Je ne pouvais pas le trouver dans le Laravel docs, mais il ne semble pas faire l'affaire.Je doit soumettre une nouvelle réponse depuis que je suis une SORTE plèbe. Un plus bonne façon d'accomplir ce pour ceux trouver sur Google comme je l'ai fait serait d'éviter d'utiliser
protected $with
si vous n'avez pas à, et, au lieu de passer quiwith()
appel à votre récupération.Et puis vous pouvez modifier le Post appel à pré-charger en tant que de besoin:
De cette façon, vous ne serez pas comme les nations unies-les données nécessaires à chaque fois que vous prenez un record, si vous n'en avez pas besoin.
Post::with('user','replies')->find($id)->toArray();
charge un post avec les liens sans avoir à remplacer toArray comme l'avait demandé. De plus, c'est tout simplement une révision sur la accepté de répondre posté par Jake pour le rendre beaucoup plus efficace de sorte que vous n'avez pas à la charge de l'utilisateur et les réponses à chaque fois qu'un post est instancié.