Спрощуйте запити з негативними відношеннями за допомогою методу whereDoesntHave у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 05 червня, 2025
Laravel запровадив нові методи для спрощення запитів з негативними відносинами, що дозволяє легше знаходити записи без специфічних відносин при збереженні чистоти та зрозумілості коду. Читайте далі, щоб дізнатися, як ці методи можуть оптимізувати вашу роботу в системах управління контентом!

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

Популярні

Logomark Logotype

"SQLSTATE[HY000] [2002] Connection refused" у Laravel в GitHub Actions

Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!

Logomark Logotype

Використання повнотекстового пошуку в Laravel

Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом

Logomark Logotype

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту