hasMany预加载关联进行get()查询,提示 Function name must be a string
1. 运行环境:php7.3 + apache2 + mysql8
1). 当前使用的 Laravel 版本?
Laravel 8.40
2). 当前使用的 php/php-fpm 版本?
PHP 版本:
php-fpm 版本:7.3
3). 当前系统
windows10
4). 业务环境
正常开发环境
5). 相关软件版本
apache2.4
2. 问题描述?
目前我有两张表,分别是brand_type,brand_type_serve进行了以下关联
public function getService()
{
return $this->hasMany(BrandTypeService::class, 'brand_type_id', 'id');
}
brand_type表内数据情况如下
brand_type_serve表内数据情况如下
关联查询语句如下
$builder = BrandType::with([
'getService.getPresentation.getDesc'
])->get();
当我避开能关联成功的brand_type中id为1,7,14的数据时候可以成功查询,如果查询所有会出现以下报错
如果我用first进行单条查询id为1,7,14的数据不会出现这种错误
调试发现关联查询没有问题,查询成功后处理关联数据时候出错,一下为报错行方法
public function makeListener($listener, $wildcard = false)
{
if (is_string($listener)) {
return $this->createClassListener($listener, $wildcard);
}
if (is_array($listener) && isset($listener[0]) && is_string($listener[0])) {
return $this->createClassListener($listener, $wildcard);
}
return function ($event, $payload) use ($listener, $wildcard) {
if ($wildcard) {
return $listener($event, $payload);
}
return $listener(...array_values($payload));//此为报错行
};
}
其实正常情况下$wildcard应该为true根本走不到报错行,而且$listener本应该是一个数组,此处却返回的是对象,不得已情况下我在patent_type_serve模型下加了以下方法
public function __invoke()
{
return null;
}
可临时处理该bug,可这个方法并不能完整达到我心理需求,各位同仁们有没有遇到过类似情况的解决方案或思路
另外 在windowsServe服务器下nginx环境中有同样问题,尝试过laravel降级至8.0也wei’nen
推荐文章: