今天部署了一个从 5.2 升级到 5.5 的项目,在调试过程中发现:查询语句中如果使用 whereHas 那么就会报 compact(): Undefined variable: operator 这个错
最后对比了这个项目的框架核心源码以及其他 5.5 项目的框架核心源码,发现是 \vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php 下的 addWhereExistsQuery 方法中:
// 升级到 5.5 的项目
$this->wheres[] = compact('type', 'operator', 'query', 'boolean');
// 其他 5.5 的项目
$this->wheres[] = compact('type', 'query', 'boolean');
正好多了一个 operator 参数,删掉之后就解决问题了