Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 在不影响JSON输出的情况下,使用group by限制结果量?_Laravel_Eloquent - Fatal编程技术网

Laravel 在不影响JSON输出的情况下,使用group by限制结果量?

Laravel 在不影响JSON输出的情况下,使用group by限制结果量?,laravel,eloquent,Laravel,Eloquent,我正试图通过将父ID分组在一起并使用take限制结果来构建一个线程注释系统 评论表 $table->increments('id'); $table->text('content'); $table->integer('post_id'); $table->integer('parent_id')->index()->nullable(); $table->string('username'

我正试图通过将父ID分组在一起并使用take限制结果来构建一个线程注释系统

评论表

$table->increments('id');
        $table->text('content');
        $table->integer('post_id');
        $table->integer('parent_id')->index()->nullable();
        $table->string('username');
        $table->string('user_image')->default('http://lorempixel.com/60/60/people/');
        $table->timestamps();
当我不使用
take()
来限制结果时,JSON输出将按预期通过
groupedBy('parent_id')

不带
take()的查询

$post->comments->groupBy('parent_id');
$post->comments->take(5)->groupBy('parent_id')

使用
take()查询

$post->comments->groupBy('parent_id');
$post->comments->take(5)->groupBy('parent_id')
当我使用
take()
时,它将JSON输出更改为不再包含按父id分组的键

如何在不影响JSON输出的情况下限制结果

编辑

岗位控制员

public function index(Post $post)
{
   $comments = $post->comments->groupBy('parent_id');
   return $comments;
}
编辑

为什么其他回复会从此线程中删除

编辑2

奇怪的是,这个查询是基于我设置的限制工作的。因此,如果我将限制设置为一个较低的限制,如5,我将按正常输出的键和JSON进行分组。但是,如果我将限制设置为5,我就不会得到这些密钥。请参见上面的JSON输出:

$comments = DB::table('comments')
                    ->where('post_id',1)
                    ->orderByDesc('created_at')
                    ->limit(7)
                    ->get();

return collect($comments)->groupBy('parent_id');

这是由
json\u encode()
处理带有数字键的数组的方式造成的

在没有
->take(5)
的情况下,数组键是
[0,1,6,9]
。它们不是顺序的,因此被编码为JSON对象

在使用
->take(5)
的情况下,数组键是
[0,1]
。它们是连续的,因此被编码为JSON数组


您可以通过对无父注释使用
null
而不是
0
来解决此问题。一般来说,使用
null
表示不存在的数据也是一个更好的解决方案。

我认为使用雄辩是不可能的,但您可以尝试使用查询:我也这么认为,但是你知道我是如何进行原始查询的吗?显示要使用的实际查询,而不是下一个访问此问题的人可能会死掉的链接,这将非常有用;您将查询放在那里,就像链接示例一样。您知道该查询是什么样子吗?我明白了:
$comments=DB::table('comments')->whereRaw('post_id=1')->groupBy('parent_id')->limit(5)->get()错误我正在获取SQLSTATE[42000]:语法错误或访问冲突:1055“threaded.comments.id”不在分组依据中(SQL:select*from
comments
where post\u id=1 groupby
parent\u id
limit 5)您能就答案给出反馈吗?