Laravel Eloquent: Wie automatisch abrufen Beziehungen beim serialisieren durch toArray/toJson
Ich zahlen dies funktioniert automatisch abrufen user
und replies
wenn ich mein Objekt serialisieren zu JSON, aber ist das überschreiben toArray
wirklich der richtige Weg, dies zu tun?
<?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();
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt überschreiben
toArray()
zu laden, Benutzer und Antworten, verwenden Sie$with
.Hier ein Beispiel:
Auch, Sie sollten mit
toArray()
im Controller, die nicht Ihre Modelle, etwa so:Hoffe, das hilft!
$with
ist dokumentiert irgendwo? Ich konnte ihn nicht finden in der Laravel docs, aber es scheint, den trick zu tun.Ich müssen uns eine neue Antwort da bin ich eine SO pleb. Eine richtige Weg, dies zu erreichen für diejenigen, finden Sie diese auf Google, wie ich sein würde, um zu vermeiden, mit
protected $with
wenn Sie nicht haben, um und statt zu verschieben, dasswith()
rufen Sie auf Ihren Abruf.Und dann könnte man ändern Sie das Post-call -, pre-load, je nach Bedarf:
Diese Weise, werden Sie nicht wie un-benötigten Daten jedes mal, wenn Sie schnappen Sie sich einen Datensatz, wenn Sie es nicht brauchen.
Post::with('user','replies')->find($id)->toArray();
laden einen post mit den Beziehungen, die zimmerreserviereung, ohne das Sie überschreiben toArray als gefragt wurde. Darüber hinaus ist dies einfach eine revision auf die akzeptierte Antwort geschrieben von Jake, um es sehr viel effizienter, so dass Sie nicht haben, um load-Benutzer und antwortet jedes mal, wenn ein post instanziiert wird.