2016-01-26 5 views
-1

Я пытаюсь запросить записи с использованием параметра с маршрута, но он не работает должным образом.Laravel 5 где метод не работает

Это мой маршрут:

Route::get('reports/{id}', '[email protected]'); 

Это мой метод контроллера:

public function show($id) { 
    return Reports::all()->where('user_id', $id); 
} 

При обращении к маршруту 'reports/1', она ничего не возвращает. Однако, если я жёстко в ИО для использования в методе, он делает работу:

public function show($id) { 
    return Reports::all()->where('user_id', 1); 
} 

Я не знаю, что случилось с моим кодом, пожалуйста, помогите.

+0

Вы не создаете или не возвращаете представление. Другими словами, вы не создаете вывод, используя 'return' в контексте, в котором вы пытаетесь это сделать. – Repox

+0

@Repox это бэкэнда модели api и im, использующая угловые для получения данных –

+1

Вы все еще не возвращаете что-нибудь. Взгляните на [документацию по ответам] (https://laravel.com/docs/5.2/responses#json-responses). – Repox

ответ

2

Ваша проблема заключается в том, что вы звоните where() в коллекцию Laravel, а не в Laravel Query Builder.

Reports::all() будет запускать запрос, который будет получать каждый отчет из базы данных и помещать его в коллекцию. Затем вы запускаете метод where() в этой коллекции.

Разница заключается в том, что метод where() в коллекции проходит через элементы коллекции и выполняет строгую сопоставление (===), тогда как построитель запросов добавляет параметризированное предложение where к SQL, заботиться о типе переменной.

Что вы используете, так это то, что при использовании переменной вы используете where('user_id', '1'), которая строит сравнение (===) поля user_id с строкой '1'. Поскольку все идентификаторы пользователя являются целыми числами, результаты не получаются.

Что вы действительно хотите сделать, это добавить свои условия в оператор SQL. Вместо текущей логики, вы хотите:

public function show($id) { 
    return Reports::where('user_id', $id)->get(); 
} 

Это позволит устранить проблему, а также возвращать только те записи, которые соответствуют вашим, где положение, которое может серьезно повысить производительность. Если у вас миллион отчетов, вы не хотите создавать коллекцию из миллиона объектов, а затем итерации через них.

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