2017-01-19 2 views
0

Я пытаюсь достичь items таблицы от CategoriesController.php, но я вижу в Laravel (5.3) Debugbar, что мой запрос не выполнен. Зачем? Вот мой код:Почему мой запрос не выполняется в контроллере?

# Http/Controllers/CategoriesController.php 

use App\Category; 
use App\Item; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 

namespace App\Http\Controllers; 

use Request; 

class CategoriesController extends Controller { 

    public function show($id) { 

    $items = \App\Item::where('id', $id); # <- This is not executed! 

    $category = \App\Category::find($id); 

    return view('categories.show', compact('category', 'items')); 

    } 

} 

ответ

5

::where() является цепочки от застройщика запросов, но вы никогда не выполнится запрос.

::where('id', $id)->first(); //if you only want the first result 
//shorthand would be ::find($id); 

В качестве альтернативы, если вы хотите каждый матч:

::where('id', $id)->get(); 
+0

Спасибо, это действительно работает. Извините - я новичок в Laravel ... Я должен подождать 9 минут, чтобы принять ответ – Gediminas

+1

Я пришел в Laravel из Ruby on Rails, там, где функция() выполняется без дополнительных команд, вот почему это вводит меня в заблуждение. Спасибо, брат! – Gediminas

1
$items = \App\Item::where('id', $id); 

Эта линия готовит запрос для Eloquent выполнить, но вы никогда не выполнить его.

Попробуйте выполнить следующее, чтобы выполнить запрос и получить все результаты.

$items = \App\Item::where('id', $id)->get(); 
1

Вы должны использовать get() или first() или paginate или pluck() или find() и т.д., чтобы выполнить запрос. В этом случае необходимо использовать first() метод:

\App\Item::where('id', $id)->first(); 

Или просто:

\App\Item::find($id); 
Смежные вопросы