我有一些查询需要一段时间,因为这些集很大。
我现在正在通过Laravel查询构建器直接通过Laravel查询构建器执行它们。
将两个表连接在一起时,表B中的字段将合并到表A的结果中。
是否可以将数据嵌套在子对象或数组中?
e.g。
\DB::table('posts')
->select('posts.id', 'posts.title', 'comments.name', 'comments.id')
->where('posts.status', '=', 'PUBLIC')
->leftJoin('comments', 'posts.comment_id', '=', 'comments.id')
->get();
返回类似的内容:
{
id: 123,
title: 'My post',
name: 'Comment name',
// ...
}
我希望:
{
id: 123,
title: 'My post',
comment {
name: 'Comment name',
// ...
}
// ...
}
答案 0 :(得分:-1)
你可以用雄辩的关系来做到这一点。
首先,声明模型中的关系。例如,在 Post.php :
中class Post extends Model
{
// ...
public function comments()
{
return $this->hasMany('App\Comment');
}
}
现在,您可以在查询中使用with('comments')
。
它应该返回一个类似于你想要的对象。
请参阅文档中的Eloquent Relationships,尤其是“预先加载”部分。
答案 1 :(得分:-2)
而不是使用()
的查询构建器您需要在模型中定义注释Post的函数
public function posts(){
return $this->belongsTo('App\Post', 'posts_id');
}
然后在您的控制器中
$result = Post::with('comments')->where('status', '=', 'PUBLIC')->select('comments')->get();