Исключить записи, которые не соответствуют условию в модели в laravel

У меня есть несколько таблиц и их моделей, которые связаны друг с другом, с именем: "users","posts","tags","comments".

Я хочу исключить данные пользователей deactive из всех этих моделей, и всякий раз, когда вызывается какая-либо из этих моделей, не возвращать пользователей, которые являются deactive.

Я не хочу исключать тех «пользователей», которые используют красноречие или построитель запросов в своих контроллерах, мне нужно сделать это в модели, чтобы это применимо ко всем местам, которые используют указанные модели.

сообщения, комментарии и теги относятся к пользователям:

 public function user()
 {
    return  $this->belongsTo('App\Models\User', 'user_id');
 }

Мне нужно что-то вроде этого в связанной модели:

$instance = $this->belongsTo('App\Models\User', 'user_id');
$instance->whereIsDeactive(0);//return active users only
return $instance;

И что-то вроде этого в пользовательской модели:

return $this->whereIsDeactive(0);

Возможно ли и есть ли способ добиться этого?

изучить использование глобальных областей видимости: laravel.com/docs/5.7/eloquent#global-scopes. Если вы добавите глобальную область видимости deactive в модель пользователя, вы никогда не должны получать пользователей deactive или связанные данные из-за активной загрузки.

adam 07.12.2018 21:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
317
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Благодаря @Adam я решил проблему, используя глобальные области.

Это глобальная область видимости IsDeactive:

namespace App\Scopes;

use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class IsDeactiveScope implements Scope
{
    /**
     * Apply the scope to a given Eloquent query builder.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $builder
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @return void
     */
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('is_deactive', 0);
    }
}

И вот как это назвать в пользовательской модели:

/**
     * The "booting" method of the model.
     *
     * @return void
     */
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope(new IsDeactiveScope());
    }

Я надеюсь, что это решение поможет другим.

Другие вопросы по теме