Метод withMin
Метод withMin применяется к запросу Eloquent
для загрузки минимального значения указанной колонки
из связанной модели. Первым параметром передаётся
имя связи, вторым - имя колонки, по которой
вычисляется минимум. Третий параметр - опциональное
имя для результирующего поля (по умолчанию используется
формат '{relation}_{column}_min').
Синтаксис
<?php
Model::withMin($relation, $column, $alias = null);
?>
Пример
Давайте получим список категорий с минимальной ценой товара в каждой категории:
<?php
namespace AppHttpControllers;
use AppModelsCategory;
class CategoryController extends Controller
{
public function index()
{
$categories = Category::withMin('products', 'price')->get();
foreach ($categories as $category) {
echo $category->name . ': ' . $category->products_min_price;
}
}
}
?>
Результат выполнения кода:
"Electronics: 99"
"Clothing: 25"
"Books: 15"
Пример
Получим список пользователей с минимальным возрастом их заказов, используя псевдоним для результата:
<?php
namespace AppHttpControllers;
use AppModelsUser;
class UserController extends Controller
{
public function index()
{
$users = User::withMin('orders', 'age', 'min_age')->get();
foreach ($users as $user) {
echo $user->name . ': ' . $user->min_age;
}
}
}
?>
Результат выполнения кода:
"John: 18"
"Jane: 22"
"Bob: 19"
Пример
Применим метод с условием фильтрации, чтобы получить только активные посты с минимальным количеством комментариев:
<?php
namespace AppHttpControllers;
use AppModelsPost;
class PostController extends Controller
{
public function index()
{
$posts = Post::where('status', 'published')
->withMin('comments', 'likes')
->get();
foreach ($posts as $post) {
echo $post->title . ': ' . $post->comments_min_likes;
}
}
}
?>
Результат выполнения кода:
"Post 1: 5"
"Post 2: 3"
"Post 3: 8"
Пример
Используем метод с несколькими связями для получения минимальных значений из разных связанных моделей:
<?php
namespace AppHttpControllers;
use AppModelsShop;
class ShopController extends Controller
{
public function index()
{
$shops = Shop::withMin('products', 'price')
->withMin('reviews', 'rating')
->get();
foreach ($shops as $shop) {
echo $shop->name . ': ' . $shop->products_min_price . ', ' . $shop->reviews_min_rating;
}
}
}
?>
Результат выполнения кода:
"Store A: 10, 3.5"
"Store B: 15, 4.0"
"Store C: 8, 2.5"