Я пытаюсь добавить условие where с помощью функции, но при этом я получаю следующую ошибку:
Call to a member function prepare() on null in /vendor\/laravel\/framework\/src\/Illuminate\/Database\/Connection.php line 327
public function getAllTeams()
{
$query = Team::where('tstatus', '!=', 'Deleted')
->where('tstatus', '!=', 'Ended');
var_dump($query->getQuery()->connection->getPdo());
$query->where(function($a){
$a->where('tname', '=', "John's Team")
->orWhere('tname', '=', "Mark's Team");
});
var_dump($query->getQuery()->connection->getPdo());
return $query->get();
}
Если я удаляю часть where tname, запрос выполняется отлично.
var_dumps выдает следующее
<code><small>Repositories/TeamRepository.php:31:</small><b>object</b(<i>Doctrine\DBAL\Driver\PDOConnection</i>)[<i>590</i>]
Репозитории / TeamRepository. php: 36: null
Я немного покопался в коде Laravel, и именно эта часть в следующем коде приводит к тому, что для переменной $ pdo устанавливается значение null
$this->model->newModelQuery()
/**
* Add a basic where clause to the query.
*
* @param \Closure|string|array $column
* @param mixed $operator
* @param mixed $value
* @param string $boolean
* @return $this
*/
public function where($column, $operator = null, $value = null, $boolean = 'and')
{
if ($column instanceof Closure) {
$column($query = $this->model->newModelQuery());
$this->query->addNestedWhereQuery($query->getQuery(), $boolean);
} else {
$this->query->where(...func_get_args());
}
return $this;
}
Я отредактировал Builder. php и заставил его работать со следующим кодом, но, очевидно, редактирование существующей библиотеки не является решением.
Почему переменная $ pdo имеет значение null, когда я использую Closure, но работает нормально, когда я не использую?