使用 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()
return 一个数组所以你也可以像下面这样尝试
$first = $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')
->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()
return 一个数组所以你也可以像下面这样尝试
$first = $data[0]