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

Php 在Laravel Eloquent中使用with()返回对象,php,laravel,eloquent,lumen,Php,Laravel,Eloquent,Lumen,目前我得到的数据如下: ->with(['posts' => function ($query) { $query->active()->available()->limit(1)->with('user'); }]) 它将用户数据作为预期的对象数组返回。因为我使用的是限制,并且只需要一个结果,所以我希望将其作为常规对象返回,而不是: "data": value, "posts": [ {

目前我得到的数据如下:

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

最好的方法是什么?

在您的模型上创建一个
hasOne
关联,定义您想要的范围

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

然后调用带有('activePost.user')的
加载带有关联用户的单个、活动的和可用的帖子。

在模型上创建一个定义所需范围的
hasOne
关联

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

然后用('activePost.user')调用
,用它的关联用户加载单个、活动的和可用的帖子。

只要你的关系是一个
有很多
有很多
属于同一个
多个
多个
关系(我想这就是所有关系),由于
with
方法的主要用途是将子句添加到关系中,因此即时加载将始终返回数组

引自laracasts论坛上的最佳答案:)


@德怀特的答案是正确的。

只要你的关系是一种
有很多
有很多
属于婚姻
变形很多
变形很多
的关系(我想这就是全部),由于
with
方法的主要用途是将子句添加到关系中,因此即时加载将始终返回数组

引自laracasts论坛上的最佳答案:)


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

这里很简单,但试着用
first()替换
limit(1)
@FelippeDuarte一点也不坏,甚至在其他表单上也被建议过,但这样做似乎不会触发
->与('user')
部分,并且仍然以数组形式返回
posts
:在这里发出砰砰声,但尝试将
限制(1)
替换为
first()
@FelippeDuarte一点也不坏,甚至在其他表单上被建议,但这样做似乎不会触发带有('user')
部分的
->,仍然以数组形式返回
posts
:PSeems就像一个想法!即使已经定义了hasMany关系,这种方法是否有效?我刚刚遇到了一个错误,first()实际上只返回一个结果,而不是每个父对象返回一个结果。。。有什么想法吗?是的,他们可以生活在一起,他们将完全独立于彼此。你不能像上面有人建议的那样在
with()
范围查询中使用
first()
,因为它需要返回查询,而不是模型。我是否也需要在新关联上写入
first()
?不-因为它是
hasOne
Laravel知道你只需要一个模型。在你的项目中运行代码,看看它对你有什么好处。这似乎是个好主意!即使已经定义了hasMany关系,这种方法是否有效?我刚刚遇到了一个错误,first()实际上只返回一个结果,而不是每个父对象返回一个结果。。。有什么想法吗?是的,他们可以生活在一起,他们将完全独立于彼此。你不能像上面有人建议的那样在
with()
范围查询中使用
first()
,因为它需要返回查询,而不是模型。我是否也需要在新关联上写入
first()
?不-因为它是
hasOne
Laravel知道你只需要一个模型。在你的项目中运行代码,看看它对你有什么好处。。。。这是怎么回答这个问题的?。。。这是怎么回答这个问题的?