Допустим, это моя структура таблицы:
posts
id - integer
title - string
body - text
reviewed - boolean
videos
id - integer
title - string
url - string
profileContent
id - integer
user_id - integer
content_id - integer
content_type - string
Теперь я хочу получить содержимое профиля пользователя:
$user->profileContents()
->latest()
->with(['content' => function ($query){
//I'm not sure how to do it
}])
->paginate(5);
Как мне сказать, ЕСЛИ колонка "пересмотрел "существует ли это правда?Но не имеет значения, просматриваются ли видео или нет.
Дополнительная информация:
profileContents () предоставляет мне все содержимое профиля пользователя
public function profileContents()
{
return $this->hasManyThrough(ProfileContent::class, Profile::class);
}
и с ('content') использует для перехода к конкретным моделям:
public function content()
{
return $this->morphTo();
}
Edit 1:
Я немного ближе кмоя цель.Я использовал GlobalScope, чтобы показывать только проверенный контент.
В сообщении:
protected static function boot()
{
parent::boot();
static::addGlobalScope('reviewed', function (Builder $builder) {
$builder->where('reviewed', true);
});
}
Но теперь у меня есть проблема, из-за которой я все еще не могу исключить пустой запрос.Я показываю вам вывод:
//ProfileContent
array:2 [
0 => array:8 [
"id" => 1
"profile_id" => "1"
"content_id" => "1"
"content_type" => "App\Video"
"content" => "[some array values]"
]
1 => array:8 [
"id" => 2
"profile_id" => "1"
"content_id" => "1"
"content_type" => "App\Post"
"content" => null
]
]
Как я могу исключить нулевой массив без потери разбитых на страницы данных (вывод должен быть 5)