使用 Laravel 的查询生成器获取新的结果集

Getting fresh result set using Laravel's Query Builder

当我创建这个查询时:

$data = DB::table('data')
        ->leftJoin('urls', 'data.url_id', '=', 'urls.id')
        ->where('urls.tag', $tag)
        ->where('urls.requester_id', $requester_id)
        ->orderBy('data.created_at')
        ->take(100);

然后获取第一行对其进行一些验证:

$sample = $data->first();

任何后续调用只会 return 第一行,即使我使用 get():

$all_rows = $data->get();

我尝试执行以下操作,但它并不能防止丢失 $data 中的其余结果集:

$first = $data;
$sample = $first->first();

$all_rows = $data->get(); // Still results in the same contents as `$sample`

也试过这个,但结果相同:

$all_rows = $data->getFresh();

这是怎么回事,我该如何解决这个问题?

$data = DB::table('data')
      ->leftJoin('urls', 'data.url_id', '=', 'urls.id')
      ->where('urls.tag', $tag)
      ->where('urls.requester_id', $requester_id)
      ->orderBy('data.created_at')
      ->get();

$sample = $data[0];
$data = DB::table('data')
      ->leftJoin('urls', 'data.url_id', '=', 'urls.id')
      ->where('urls.tag', $tag)
      ->where('urls.requester_id', $requester_id)
      ->orderBy('data.created_at')
      ->get();

将return所有符合您预期的数据。以下将是第一个结果。

$first = $data->first();

阅读有关 get() and first() 的文档。

->get() return 一个数组所以你也可以像下面这样尝试

$first = $data[0]