Поскольку я использую 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, он также работает хорошо, возвращая именно то, что должен.
Где я делаю ошибку?