オブジェクトをJSONにシリアル化しているときにuser
とreplies
を自動的にフェッチするためにこれが機能すると思いますが、toArray
をオーバーライドすると、実際にこれを行う適切な方法ですか?
<?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();
}
}
toArray()
をオーバーライドしてユーザーと返信を読み込む代わりに、_$with
_を使用します。
次に例を示します。
_<?php
class Post extends Eloquent
{
protected $table = 'posts';
protected $fillable = array('parent_post_id', 'user_id', 'subject', 'body');
protected $with = array('user', 'replies');
public function user()
{
return $this->belongsTo('User');
}
public function replies()
{
return $this->hasMany('Post', 'parent_post_id', 'id');
}
}
_
また、次のように、モデルではなくコントローラでtoArray()
を使用する必要があります。
_Post::find($id)->toArray();
_
お役に立てれば!
私はSO plebなので、新しい回答を提出する必要があります。Googleでこれを見つけた人のためにこれを達成するためのより適切な方法は、_protected $with
_の使用を避けることです。する必要はなく、代わりにwith()
呼び出しを検索に移動します。
_<?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');
}
}
_
そして、必要に応じてPost呼び出しを変更してプリロードすることができます。
_Post::with('user','replies')->find($id)->toArray();
_
これにより、レコードが不要な場合に、レコードを取得するたびに不要なデータを含めることがなくなります。