说,我有5个系统(让我们称之为)。
每个系统都有员工。
当系统#1的员工登录时,我想向他显示仅为系统#1工作的其他员工的列表。
我想使用全球范围。
但我找不到注入登录用户的system_id的方法。
我尝试了匿名全局范围 - 但静态启动确实无法接受system_id:
protected static function boot() { //this will not work, as scope method is static $userId = auth()->user()->system_id; parent::boot(); static::addGlobalScope('thisSystemUser', function (Builder $builder) use($userId) { $builder->where('system_id', $userId); }); }
我还尝试了具有单独类的全局范围 - 同样的问题:
namespace App\Scopes; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Scope; class SystemEmployeeScope 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) { // no luck here as well $userId = auth()->user()->system_id; /** * appended query constraint for this scope */ $builder->where('system_id', $userId); } }
我尝试使用$ model - 无济于事。它返回空模型。任何试图通过$ model获得一些数据的尝试也都在减少。
我不想使用本地范围或动态范围,因为它们不是我想要完成的,并且有更好的方法,在我的情况下使用这些,例如:条件直接在关系 - 在我看来是多对多的。
有没有办法,我不知道并且不太复杂,不能将system_id塞进范围?
答案 0 :(得分:2)
您可以这样做。
namespace App\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
class SystemEmployeeScope implements Scope
{
private $user;
public function __construct()
{
$this->user = auth()->user();
}
public function apply(Builder $builder, Model $model)
{
$userId = $this->user->id
$builder->where('system_id', $userId);
}
}