【问题标题】:chunking and limit in fputcsvfputcsv 中的分块和限制
【发布时间】:2016-03-01 22:19:30
【问题描述】:

我正在尝试在 laravel 中使用 fputcsv 导出用户详细信息。这是我的代码。

     DB::table('users')->where('department', '=', MCA)->distinct('email')->select('rollno', 'email')
                    ->chunk(500, function ($users) use ($handle) {
                        foreach ($users as $user) {
                            // Add a new row with data
                            fputcsv($handle, [
                                $user->rollno,
                                $user->email,

                            ]);
                        }
  });

            fclose($handle);
        }, 200, $headers);

        return $response->send();

使用此代码我能够获取所有记录,但是否有任何选项可以限制要导出的记录数。我曾尝试使用 take(),但它没有用。 有什么建议吗?

【问题讨论】:

  • 这不是已经将它们分块了 500 吗?
  • @CanCelik ya 它的分块然后是 500,但我的问题是这个查询会生成 10000 条记录,但我只想得到 3000 条。
  • 你试过先拍后拍吗?
  • @CanCelik 我正在尝试将其扩展到一百万个条目。如果我先采取,那么变量将无法处理这么多数据。

标签: laravel fputcsv


【解决方案1】:

您可以使用 take 来限制您的查询。

DB::table('users')->where('department', '=', MCA)
                   ->distinct('email')
                   ->select('rollno', 'email')
                   ->take(3000)
                   ->chunk(500, function ($users) use ($handle) {
                       ....
                       ....
                       ....

                   });

return $response->send();

【讨论】:

  • 我也尝试过同样的方法,但它没有限制......它会获取整个结果。
  • 不知道为什么如果这不会限制。我会尝试删除 distinct('email') 并改用 groupby 。也可能在查询后对结果进行分块?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
相关资源
最近更新 更多