由于我使用的是Laravel 5.1,并且在该版本中未实现功能withoutGlobalScope()
,所以我试图像这样克服它:
作用域类:
class RentsScope implements ScopeInterface
{
public function apply(Builder $builder, Model $model)
{
$builder->whereNotIn('type', ['security_deposit_migration']);
}
public function remove(Builder $builder, Model $model)
{
$query = $builder->getQuery();
foreach ((array) $query->wheres as $key => $where)
{
if($where['type'] == 'NotIn' && in_array('security_deposit_migration', $where['values'])) {
unset($query->wheres[$key]);
break;
}
}
}
}
用于删除该范围的函数,它是在我使用它的模型中编写的:
public static function withoutRentScope()
{
return with(new static)->newQueryWithoutScope(new RentsScope);
}
当我尝试使用它时:
$type = Rent::withoutRentScope()->where('property_id', $this->property_id)->where('lease_request_id', $this->id)->orderBy('created_at', 'asc')->first();
它只运行了这一行代码,没有引起任何异常,但是没有任何内容写入$type
中。另外,要检查一切是否正常,SQL查询(我通过调用toSql()
函数获得)看起来不错,而当我在MySql Workbench中运行它时,它也很好,返回了正确的结果。
我在哪里弄错了?