目前我得到的数据如下:
->with(['posts' => function ($query) {
$query->active()->available()->limit(1)->with('user');
}])
并将用户数据作为预期的对象数组返回。因为我使用限制并且只需要一个结果,所以我想将其作为常规对象返回,因此不是:
"data": value,
"posts": [
{
"data": value,
"user": {
"data": value
}
}
]
我想将其作为:
返回"data": value,
"post":
{
"data": value,
"user": {
"data": value
}
}
最好的方法是什么?
答案 0 :(得分:1)
在您的模型上创建一个hasOne
关联,用于定义您喜欢的范围。
public function activePost()
{
return $this->hasOne(Post::class)->active()->available();
]
然后致电with('activePost.user')
加载与其相关用户的单个,有效且可用的帖子。
答案 1 :(得分:1)
只要您的关系是hasMany
,hasManyThrough
,belongsToMany
,morphMany
,morphedByMany
关系(我认为这就是所有关系),渴望加载将始终返回一个数组,因为with
方法的主要用途是为关系添加子句。
引用laracasts论坛的最佳答案:https://www.laracasts.com/discuss/channels/eloquent/first-and-take-do-not-work-correctly-in-eager-load-laravel?page=0)
@Dwight的答案是正确的方法。