Метод 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,
который определяет отношение один-ко-многим