我认为这可以在我将对象序列化为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();
}
}
答案 0 :(得分:39)
使用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();
希望这有帮助!
答案 1 :(得分:4)
我必须提交一个新的答案,因为我是一个SO Pleb。如果您不必使用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');
}
}
调用移至您的检索位置。 / p>
Post::with('user','replies')->find($id)->toArray();
然后您可以根据需要修改Post调用以预加载:
{{1}}
这样,如果您不需要记录,每次获取记录时都不会包含不需要的数据。