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 及其关联用户。

只要你们的关系是hasManyhasManyThroughbelongsToManymorphManymorphedByMany关系(我想都是这样) , 预先加载将始终 return 一个数组,因为 with 方法的主要用途是向关系中添加子句。

引自 laracasts 论坛上的最佳答案:https://www.laracasts.com/discuss/channels/eloquent/first-and-take-do-not-work-correctly-in-eager-load-laravel?page=0)

@Dwight 的回答是正确的做法。