Вы можете попробовать Области запросов .
Написание глобальных областей
<?php
namespace App\Scopes;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
class TeamScope 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('team_id', '=', \Auth::user()->team_id); // Change it with correct team_id of your logged user
}
}
Применение глобальной области действия
Чтобы назначить глобальную область видимости модели, необходимо переопределить метод загрузки данной модели и использовать метод addGlobalScope:
<?php
namespace App;
use App\Scopes\TeamScope;
use Illuminate\Database\Eloquent\Model;
class Sample extends Model
{
/**
* The "booting" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot();
static::addGlobalScope(new TeamScope);
}
}
После добавления области видимости запрос к Sample::all()
выдастследующий SQL:
select * from
samples where
team_id = 1
Вот документация Laravel about global scopes