【发布时间】:2021-02-03 06:21:56
【问题描述】:
我正在将我的 laravel 从 5.5 升级到 5.6。在运行测试时,我收到此错误:
ErrorException: compact(): Undefined variable: operator
现在这里有一个解决方案Laravel - compact(): Undefined variable: operator in Builder.php,但我正在遵循这个解决方案,但仍然面临这个错误。早些时候我从5.4升级到5.6,然后在看到上述问题中提到的解决方案后,我从5.4升级到5.5,现在尝试从5.5升级到5.6。
这是导致此错误的一小段代码:
$query = TransportOrder::with('orderNumber');
$query->whereHas('orderNumber', function ($q) use ($orderNumber) {
$q->where('order_number', '=', $orderNumber);
});
return $query->first();
whereHas 导致了这个问题。那么whereHas 和with 是否有替代方案,或者我缺少任何其他解决方案?
我的php版本是这样的:
PHP 7.3.23-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Oct 6 2020 11:36:27) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.23, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.23-1+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
with blackfire v1.24.2~linux-x64-non_zts73, https://blackfire.io, by Blackfire
编辑:
compact() 用于vendor 类Builder:
public function addWhereExistsQuery(self $query, $boolean = 'and', $not = false)
{
$type = $not ? 'NotExists' : 'Exists';
$this->wheres[] = compact('type', 'operator', 'query', 'boolean');
$this->addBinding($query->getBindings(), 'where');
return $this;
}
【问题讨论】:
-
我没有在我的代码中使用 compact,它在供应商文件中。 @KamleshPaul 我已经更新了问题。
-
$this->wheres[] = compact('type', 'operator', 'query', 'boolean');这行导致错误,它期望有变量 -
试试
$not = false到$operator = false可能是你想要的 -
@KamleshPaul 这是供应商文件,我不想更改它。
-
然后删除那个库。
标签: php laravel upgrade laravel-5.6