2015-06-30 2 views
1

Я пытаюсь передать построитель запросов для просмотра, и я хочу его распечатать. Query builder не возвращает null, но я не могу его передать или распечатать.Laravel 5: невозможно передать данные контроллеру через перенаправление

Контроллер

public function search() { 
    $option1 = Request::get('option1'); 
    $option2 = Request::get('option2'); 
    $condition = Request::get('condition'); 
    $date_option = Request::get('dateOption'); 
    $option1_value = Request::get('option1_value'); 
    $option2_value = Request::get('option2_value'); 
    $fromDate = Request::get('fromDate'); 
    $toDate = Request::get('toDate'); 

    if ($condition == 'no') { 
     $vehicles = Vehicle::with('brand', 'section', 'representive', 'buyer', 'seller', 'buyingPaymentType', 'sellingPaymentType')->where($option1, $option1_value)->get(); 
     //return $vehicle; 
    } 
    if ($condition == 'or') { 
     $vehicles = Vehicle::with('brand', 'section', 'representive', 'buyer', 'seller', 'buyingPaymentType', 'sellingPaymentType')->where($option1, $option1_value)->orWhere($option2, $option2_value)->get(); 
    } 
    if ($condition == 'and') { 
     $vehicles = Vehicle::with('brand', 'section', 'representive', 'buyer', 'seller', 'buyingPaymentType', 'sellingPaymentType')->where($option1, $option1_value)->where($option2, $option2_value)->get(); 
    } 

    return redirect()->back()->with('vehicles', $vehicles); 
    //return $vehicles; 
} 

Посмотреть

@if(isset($vehicles)) 
    @foreach($vehicles as $vehicle) 
     <td>{{ $vehicle->id }}</td> 
    @endforeach 
@endif 

Что я делаю неправильно? Любая помощь будет оценена по достоинству.

+0

Я изо всех сил пытаюсь понять, что вы пытаетесь сделать. Если вы пытаетесь создать форму поиска и отобразить результаты, используйте GET-маршрут вместо этого, так что вам не нужно перенаправлять, URL-адрес можно занести в закладки и т. Д. –

+0

@MartinBean, OP пытается передать дополнительные данные с помощью перенаправления. которые могут быть или не быть частью предоставленной формы. Представьте, что вы входите в систему пользователя, и в случае успеха вы передаете некоторые дополнительные данные, кроме объекта 'user' (например, объекты' vehicle', связанные с этим 'user'), на следующую страницу. –

+0

@ArmanH Он выглядит как форма для поиска, создавая запрос на основе переданных параметров. Если это была форма входа в систему, игнорирование ее слишком много полей, почему бы OP не запросить базу данных на основе идентификатора аутентифицированного пользователя? –

ответ

0

Перенаправление с использованием with('vehicles', $vehicles) по методу redirect() создает флэш-сообщение с vehicles сеанса, вместо передачи данных к следующему контроллеру (см Laravel 5.1 Redirect Documentation).

It seems that you can't send variables per se, поэтому вам придется полагаться на данные сеанса.

Вы можете проверить, если сообщение вспышка установлена ​​на ваш взгляд, используя session->has('vehicles') или session->('vehicles') помощникам:

@if(session()->has('vehicles'))) 
    {{ session('vehicles') }} 
@endif 

Поскольку ваши $vehicles является сложным объектам, вы должны проверить, как Laravel обрабатывает сериализации его в сессии , и, возможно, потребуется выполнить неэтериализацию, прежде чем вы сможете перебрать элементы.

+0

Вы неправильно поняли документацию, к которой вы привязались. с() мигает данные на сеансе, который часто используется для флэш-сообщений, но также и для любых других данных, которые вы хотите выполнить. Его массив будет правильно сериализован. Как я уже указывал в своем ответе, ему просто нужно прочитать его с сессии обратно в переменную, если он хочет получить к ней доступ с использованием локальных переменных. –

+0

@Rob_vH Я не уверен, где мое недоразумение, но спасибо за повторное повторение двух существующих ответов. –

+0

«сеансовое флэш-сообщение» - оно мигает переменными для сеанса (которые могут использоваться для сообщений, но не особенно специфичны для них). Затем он может вернуть их с другой стороны с помощью Session :: get(). Сериализация неявна, и таким образом вы можете спрятать массив и вернуть его на другом конце. –

0

При использовании перенаправления и вы можете использовать Sessions

@if(Session::has('vehicles')) 
    @foreach(Session::get('vehicles') as $vehicle) 

    @endforeach 
@endif 
0

Проблема заключается в том, что в то время как вы блеснули массив $ транспортных средств на сессии (который работает как надо с кодом), вы никогда не читая его обратно. Я думаю, вы ожидаете, что что-то в сеансе автоматически вернет его в переменную при следующей загрузке, но это не так.

Скорее, вам нужно прочитать переменную из сеанса. Что-то вроде:

Как и раньше:

return redirect()->back()->with('vehicles', $vehicles);  

Тогда, где предыдущий маршрут обрабатывается вы можете прочитать сессию и проверить, является ли это нуль или нет;

$vehicles = \Session::get('vehicles'); 

Тогда вы можете использовать его, как обычно. Вы также можете получить доступ к переменным сеанса непосредственно из шаблонов Blade, как показал вам Элвин.

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