#php #laravel
#php #laravel
Вопрос:
Я хочу фильтровать только те категории, в которых есть хотя бы один продукт. Я пишу Category::with(‘products’)-> … но как мне отфильтровать эти пустые категории? Те, у которых нет продукта?
appCategory.php:
class Category extends Model {
// ...
public function products() {
return $this->hasMany('AppProduct');
}
// ...
}
appHttpControllerCategoriesController.php:
function getIndex() {
$categories = Category::with('products')->get();
return view('categories.index', compact('categories'));
}
Ответ №1:
Вы можете использовать has
в нем
$users = Category::has('products')->get();
// only Categories that have at least one product are contained in the collection
has()
заключается в фильтрации выбранной модели на основе отношения. Таким образом, он действует очень похоже на обычное условие WHERE. Если вы просто используете has('relation')
это, это означает, что вы хотите получить только те модели, которые имеют хотя бы одну связанную модель в этом отношении.
Ответ №2:
Я нашел решение..
Для этого есть функция приложения: has() .
appHttpControllerCategoriesController.php:
function getIndex() {
$categories = Category::with('products')->has('products')->get();
return view('categories.index', compact('categories'));
}