РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
212 of 1392 menu

Метод ofMany

Метод ofMany применяется к запросу Eloquent отношения и возвращает одну связанную модель, выбранную на основе условия сортировки. Первым параметром передаётся имя колонки, по которой выполняется сортировка, вторым - направление сортировки ('asc' или 'desc'). Метод позволяет получить последнюю или первую запись в связанной коллекции без дополнительных запросов.

Синтаксис

<?php Model::hasMany(...)->ofMany($column, $direction); ?>

Пример

Давайте получим последний заказ для каждого пользователя:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class User extends Model { public function latestOrder() { return $this->hasOne(Order::class)->ofMany('created_at', 'desc'); } } ?>
<?php namespace AppHttpControllers; use AppModelsUser; class UserController extends Controller { public function index() { $user = User::find(1); $order = $user->latestOrder; echo $order->id; echo $order->created_at; } } ?>

Результат выполнения кода:

5 "2024-01-15 14:30:00"

Пример

Давайте получим самого старого пользователя в каждой группе:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Group extends Model { public function oldestUser() { return $this->hasOne(User::class)->ofMany('created_at', 'asc'); } } ?>
<?php namespace AppHttpControllers; use AppModelsGroup; class GroupController extends Controller { public function index() { $groups = Group::with('oldestUser')->get(); foreach ($groups as $group) { echo $group->name . ': ' . $group->oldestUser->name; } } } ?>

Результат выполнения кода:

"Admins: John" "Users: Alice" "Guests: Bob"

Пример

Давайте получим последний комментарий для каждой статьи:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Article extends Model { public function lastComment() { return $this->hasOne(Comment::class)->ofMany('created_at', 'desc'); } } ?>
<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function index() { $articles = Article::with('lastComment')->get(); foreach ($articles as $article) { echo $article->title . ' - ' . $article->lastComment->created_at; } } } ?>

Результат выполнения кода:

"Article 1 - 2024-01-15 12:00:00" "Article 2 - 2024-01-14 18:30:00" "Article 3 - 2024-01-13 09:15:00"

Смотрите также

  • метод latestOfMany,
    который является псевдонимом для получения последней записи
  • метод oldestOfMany,
    который является псевдонимом для получения первой записи
  • метод hasOne,
    который определяет отношение один-к-одному
  • метод hasMany,
    который определяет отношение один-ко-многим
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить