Исключить записи, которые не соответствуют условию в модели в laravel - PullRequest
0 голосов
/ 07 декабря 2018

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

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

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

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

 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);

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

1 Ответ

0 голосов
/ 08 декабря 2018

Благодаря @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());
    }

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

...