我试图通过following the documentation在Laravel 4.2中实现全局范围。我创建了一个UserTypeTrait
来向全局范围添加UserTypeScope
。这是我的UserTypeTrait
:
trait UserTypeTrait
{
public static function bootUserTypeTrait()
{
Log::info('bootUserTypeTrait fired');
static::addGlobalScope(new UserTypeScope);
}
}
这是我的UserTypeScope
:
class UserTypeScope implements ScopeInterface
{
public function apply(Builder $builder)
{
Log::info('apply fired');
$model = $builder->getModel();
}
public function remove(Builder $builder)
{
// @todo
}
我正在尝试将此特征应用于我的Customer
对象:
class Customer extends User
{
use UserTypeTrait;
}
每当应用程序启动时,我都会收到确认,即在我的日志文件中触发了bootUserTypeTrait()
方法。我想在Customer
的{{1}}方法中为与apply
模型相关的所有查询添加约束,但我无法弄清楚如何触发{{1} }} 方法。从文档中,似乎应该在我查询模型时触发它。我尝试了一些测试,但没有一个测试会导致UserTypeScope
方法被触发。例如:
apply
在我的日志文件中,我看到很多apply
和没有public function testUserTypeScopeApplyFires()
{
FactoryMuffin::create('Users\Customer');
$customers = Customer::all(); // this does note fire `UserTypeScope::apply()`
$customer = Customer::first(); // neither does this
}
条目。何时调用bootUserTypeTrait fired
方法?我以为我正确地遵循了文档。我错过了什么吗?