Правильно ли так писать запросы в БД Laravel 8
Всем привет, не так давно работаю с Laravel и еще не все понял. Больше всего трудностей вызывает для меня передача переменной во вьюхи. К примеру у меня из одной таблицы данные выводят в 2 вьюхи, как правильно будет передавать в них переменные? Вот у меня есть:
public function home(){
return view('home');
}
public function products($product = null){
$proditem = Product::where('id', '1')->get();
return view('products', compact('proditem'));
}
Я в products через compact передал переменную, но эти же данные нужно и в home передать, как это правильно сделать? Не дублировать тот же запрос из БД в home? Или добавить такие переменные во ViewComposer? В ютубе видел чувак прям во вьюхе писал запрос, типа:
@foreach(App\Models\Product::all() as $prod)
{{$prod->name}}
@endforeach
Насколько правильно так делать?
Ответы (1 шт):
Второй вариант записи лучше не использовать
Если в вашем контроллере все методы используют какую-то переменную, можно вынести её в конструктор:
private $products;
public function __construct(){
$this->products = Product::all();
}
А позже передавать в функцию view посредством $this->products
public function home(){
return view('home', ['products' => $this->products]);
}
public function products($product = null){
return view('products', ['products' => $this->products]);
}
Однако, если вы используете эту переменную не во всех методах контроллера, лучше создавать её отдельно в каждом методе, чтобы избежать ненужных запросов к БД