Return 在 Laravel Eloquent 中使用 with() 的对象
Return object using with() in Laravel Eloquent
目前我得到的数据是这样的:
->with(['posts' => function ($query) {
$query->active()->available()->limit(1)->with('user');
}])
并且它 return 将用户数据作为预期的对象数组。因为我使用的是限制并且只需要一个结果,所以我想 return 它作为一个常规对象,而不是:
"data": value,
"posts": [
{
"data": value,
"user": {
"data": value
}
}
]
我想return它作为:
"data": value,
"post":
{
"data": value,
"user": {
"data": value
}
}
最好的方法是什么?
在您的模型上创建一个 hasOne
关联来定义您想要的范围。
public function activePost()
{
return $this->hasOne(Post::class)->active()->available();
]
然后调用 with('activePost.user')
加载单个、活动且可用的 post 及其关联用户。
只要你们的关系是hasMany
、hasManyThrough
、belongsToMany
、morphMany
、morphedByMany
关系(我想都是这样) , 预先加载将始终 return 一个数组,因为 with
方法的主要用途是向关系中添加子句。
引自 laracasts 论坛上的最佳答案:https://www.laracasts.com/discuss/channels/eloquent/first-and-take-do-not-work-correctly-in-eager-load-laravel?page=0)
@Dwight 的回答是正确的做法。
目前我得到的数据是这样的:
->with(['posts' => function ($query) {
$query->active()->available()->limit(1)->with('user');
}])
并且它 return 将用户数据作为预期的对象数组。因为我使用的是限制并且只需要一个结果,所以我想 return 它作为一个常规对象,而不是:
"data": value,
"posts": [
{
"data": value,
"user": {
"data": value
}
}
]
我想return它作为:
"data": value,
"post":
{
"data": value,
"user": {
"data": value
}
}
最好的方法是什么?
在您的模型上创建一个 hasOne
关联来定义您想要的范围。
public function activePost()
{
return $this->hasOne(Post::class)->active()->available();
]
然后调用 with('activePost.user')
加载单个、活动且可用的 post 及其关联用户。
只要你们的关系是hasMany
、hasManyThrough
、belongsToMany
、morphMany
、morphedByMany
关系(我想都是这样) , 预先加载将始终 return 一个数组,因为 with
方法的主要用途是向关系中添加子句。
引自 laracasts 论坛上的最佳答案:https://www.laracasts.com/discuss/channels/eloquent/first-and-take-do-not-work-correctly-in-eager-load-laravel?page=0)
@Dwight 的回答是正确的做法。