Laravel 11/Livewire3中Blade读取数组报'hits'键不存在错误
问题原因及解决方案
核心问题
你调用paginateRaw(10)->items()后,得到的是Eloquent模型实例的数组,而非MeiliSearch返回的原始响应(带hits键的结构)。这就是var_dump能看到模型数据,但取不到hits键的根本原因。
先修正语法错误
你的搜索闭包参数存在语法问题,第一个参数漏写了MeiliSearch客户端实例,补全后代码才能正常运行:
$this->dataFromMLS = Article::search($this->search, function($meiliSearch, string $query, array $options ) { $options['attributesToHighlight'] = ['title', 'text', 'text_shortly']; return $meiliSearch->search($query, $options); })
针对性解决方案
根据你的需求选择对应方式:
1. 直接获取MeiliSearch原始响应(含hits)
如果需要拿到MeiliSearch返回的完整原始结构(包括hits、totalHits等),不要调用paginateRaw(),改用raw()方法:
$this->dataFromMLS = Article::search($this->search, function($meiliSearch, string $query, array $options ) { $options['attributesToHighlight'] = ['title', 'text', 'text_shortly']; return $meiliSearch->search($query, $options); })->raw(); // 此时可正常访问: // $dataFromMLS['hits']
2. 分页同时保留高亮等元数据
如果需要分页功能,同时要获取MeiliSearch返回的高亮、评分等元数据,可以保留paginateRaw(),通过模型的scoutMetadata()方法获取这些附加数据:
// 控制器/组件中 $this->dataFromMLS = Article::search($this->search, function($meiliSearch, string $query, array $options ) { $options['attributesToHighlight'] = ['title', 'text', 'text_shortly']; return $meiliSearch->search($query, $options); })->paginateRaw(10); // Blade模板中遍历使用 @foreach($dataFromMLS->items() as $article) <h3>{{ $article->title }}</h3> <!-- 输出高亮后的标题内容 --> <p>{!! $article->scoutMetadata()['_highlightResult']['title']['value'] !!}</p> @endforeach <!-- 渲染分页链接 --> {{ $dataFromMLS->links() }}
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

