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知道你只需要一个模型。在你的项目中运行代码,看看它对你有什么好处。。。。这是怎么回答这个问题的?。。。这是怎么回答这个问题的?