При условии, что ваши отношения следующие:
users
id - integer
name - string
galleries
id - integer
user_id- integer
name - string
logs
id - integer
gallery_id - integer
title - string
Вы можете использовать hasManyThrough Relationship (https://laravel.com/docs/7.x/eloquent-relationships#has -many-through )
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Get all of the logs for the user.
*/
public function logs()
{
return $this->hasManyThrough('App\Log', 'App\Gallery');
}
}
Вы можете затем получить последние журналы, используя:
$logs = User::whereHas('logs', function($query){
$query->orderBy('created_at', 'desc');
})->get();
РЕДАКТИРОВАТЬ
Вы не можете ограничить количество журналов, взятых в отношении. Обходной путь - загрузить запрошенные ограниченные отношения отдельно, как описано здесь: https://github.com/laravel/framework/issues/18014
Вы можете обновить свою модель пользователя:
/**
* Limit the relationship to only include 5 results
*/
public function onlyFiveLogs()
{
return $this->logs()->take(5);
}
И затем для каждого $ Пользователь, вы можете загрузить отношения вручную:
$users->each(function($user) {
$user->load('onlyFiveLogs');
});