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, роблячи запити з негативними відношеннями більш інтуїтивно зрозумілими та підтримуваними, покращуючи при цьому читабельність коду.