在Laravel Eloquent中使用with()返回对象

时间:2018-01-23 20:24:45

标签: php laravel eloquent lumen

目前我得到的数据如下:

->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
          }
        }

最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

在您的模型上创建一个hasOne关联,用于定义您喜欢的范围。

public function activePost()
{
    return $this->hasOne(Post::class)->active()->available();
]

然后致电with('activePost.user')加载与其相关用户的单个,有效且可用的帖子。

答案 1 :(得分:1)

只要您的关系是hasManyhasManyThroughbelongsToManymorphManymorphedByMany关系(我认为这就是所有关系),渴望加载将始终返回一个数组,因为with方法的主要用途是为关系添加子句。

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

@Dwight的答案是正确的方法。