2015-03-12 1 views
0

Когда я создаю этот запрос:Получение свежий набор результатов с помощью Laravel в 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(); 

Что здесь происходит и как это обойти?

+0

Что ваша проблема? Опишите это подробно. – lijinma

+0

приведенный выше код должен работать. как вы передаете данные контроллеру? – itachi

+0

@itachi да, я бы подумал, что нужно. Контроллеру ничего не передается. Это команда, которая генерирует только CSV-файл. – eComEvo

ответ

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(); 

Читайте о get() и first() на док.

->get() возвращает массив, так что вы можете попробовать, как нижеуказанные

$first = $data[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]; 

 Смежные вопросы

  • Нет связанных вопросов^_^