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

时间:2015-03-12 00:02:45

标签: laravel laravel-4 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();

即使我使用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();

这里发生了什么,我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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();

$sample = $data[0];

答案 1 :(得分: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();

将返回与您的预期匹配的所有数据。以下是第一个结果。

$first = $data->first();

在doc。

上阅读get()first()

->get()返回一个数组,以便您可以尝试以下内容

$first = $data[0]