You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:37:13