如何使用 Laravel 查询全局范围
How do I use Laravel Query Global Scopes
我正在实施 Laravel 全局范围,如记录的那样 here 但这似乎对我不起作用。下面是我在 User.php
模型
中的代码行
<?php
namespace App;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function booted()
{
static::addGlobalScope('age', function (Builder $builder) {
$builder->where('age', '>' , 100);
});
}
}
当我解雇 User::all()
时,它只给我用户查询 select * from users
如果我在这里做错了什么或遗漏了什么,请告诉我...
我终于发现我犯了什么错误。如果有人这样做,请检查以下详细信息。
如问题中所述,我使用的是 Laravel 6.x,但我指的是 Laravel 7.x,两者有很大的不同。
在 Laravel 6.x 中我们使用
protected static function boot(){
parent::boot();
static::addGlobalScope(new BlockedUserScope);
}
并且在 Laravel 7.x 中我们使用
protected static function booted(){
static::addGlobalScope(new BlockedUserScope);
}
在Laravel8.x中我们使用
protected static function booted()
{
static::addGlobalScope(function ($query) {
$query
->join('model_has_roles', function ($join) {
$join->on('model_id', '=', 'users.id')
->where('model_type', '=', 'App\Models\User');
})
->join('roles', function ($join) {
$join->on('role_id', '=', 'roles.id')
->where('roles.name', '=', 'visitor');
})
->select('users.*');
});
}
我正在实施 Laravel 全局范围,如记录的那样 here 但这似乎对我不起作用。下面是我在 User.php
模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function booted()
{
static::addGlobalScope('age', function (Builder $builder) {
$builder->where('age', '>' , 100);
});
}
}
当我解雇 User::all()
时,它只给我用户查询 select * from users
如果我在这里做错了什么或遗漏了什么,请告诉我...
我终于发现我犯了什么错误。如果有人这样做,请检查以下详细信息。
如问题中所述,我使用的是 Laravel 6.x,但我指的是 Laravel 7.x,两者有很大的不同。 在 Laravel 6.x 中我们使用
protected static function boot(){
parent::boot();
static::addGlobalScope(new BlockedUserScope);
}
并且在 Laravel 7.x 中我们使用
protected static function booted(){
static::addGlobalScope(new BlockedUserScope);
}
在Laravel8.x中我们使用
protected static function booted()
{
static::addGlobalScope(function ($query) {
$query
->join('model_has_roles', function ($join) {
$join->on('model_id', '=', 'users.id')
->where('model_type', '=', 'App\Models\User');
})
->join('roles', function ($join) {
$join->on('role_id', '=', 'roles.id')
->where('roles.name', '=', 'visitor');
})
->select('users.*');
});
}