Удаление глобальной области видимости от застройщика - PullRequest
0 голосов
/ 18 апреля 2019

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

Где я делаю ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...