Laravel впроваджує нові методи, які спрощують запити на відсутність зв'язків, дозволяючи легше знаходити записи без певних відношень при збереженні чистоти та читабельності коду
Методи whereDoesntHaveRelation
пропонують зручний спосіб запитувати записи без специфічних зв'язків:
User::whereDoesntHaveRelation(
'posts',
'published_at',
'>',
now()->subWeek()
)->get();
User::whereMorphDoesntHaveRelation(
'activities',
[Comment::class, Review::class],
'is_featured',
true
)->get();
Ці методи особливо цінні в системах управління контентом:
class ContentManager
{
public function findDormantAuthors()
{
return User::whereDoesntHaveRelation(
'articles',
'published_at',
'>',
now()->subDays(60)
)->get();
}
public function getUnmoderatedContent()
{
return Article::whereDoesntHaveRelation(
'moderations',
'reviewed_at',
'!=',
null
)->get();
}
public function getUnpopularContent()
{
return Article::whereMorphDoesntHaveRelation(
'reactions',
[Like::class, Share::class, Bookmark::class],
'created_at',
'>',
now()->subMonth()
)->get();
}
public function archiveStaleContent()
{
return Article::query()
->whereDoesntHaveRelation('comments', 'id', '!=', null)
->whereDoesntHaveRelation('views', 'id', '!=', null)
->whereDoesntHaveRelation(
'updates',
'created_at',
'>',
now()->subMonths(6)
)
->update(['status' => 'archived']);
}
}
Ці нові методи усувають потребу в складних замиканнях whereDoesntHave
, роблячи запити на відсутність зв'язків більш інтуїтивними та легкими для підтримки, при цьому покращуючи читабельність коду