Laravel Scout+Meilisearch报错:Builder::search方法不存在
排查与解决方法
1. 检查GetOrganizations类的scope方法代码
错误核心是Laravel\Scout\Builder实例上调用了不存在的search方法。你需要确认在调用Organization::search($this->search)之后,有没有在链式调用中再次使用->search(...)。
比如错误的写法:
// 错误:在Scout Builder实例上重复调用search方法 Organization::search($this->search)->search('额外关键词')->get();
正确的写法应该是直接使用Organization::search($this->search)初始化搜索,若需追加条件,使用Scout提供的query()、where()等方法:
// 正确示例 $query = Organization::search($this->search); // 如需添加额外筛选条件 $query->where('status', 'active'); return $query->get();
2. 区分Eloquent查询与Scout查询逻辑
如果你的scope方法原本用于Eloquent查询,注意不要混淆调用链:Scout的search()是模型的静态方法,返回的是Scout Builder实例,而非Eloquent Builder;反之,Eloquent的query()返回的实例也不支持search()方法。确保整个调用链的实例类型统一。
3. 验证Scout版本与Laravel 11兼容性
Laravel 11要求Scout版本至少为v10.0,执行命令确认版本:
sail composer show laravel/scout
若版本低于v10.0,执行升级:
sail composer require laravel/scout:^10.0
4. 清除配置与缓存
旧缓存可能导致类加载异常,执行以下命令清理:
sail php artisan config:clear sail php artisan cache:clear
5. 确认模型的Searchable trait正确引入
再次检查Organization模型代码,确保trait和索引方法正常:
use Laravel\Scout\Searchable; class Organization extends Model { use Searchable; public function toSearchableArray() { return [ 'id' => $this->id, 'name' => $this->name, // 其他需要索引的字段 ]; } }
内容的提问来源于stack exchange,提问作者Jorge Cordero
相关产品推荐
相关产品推荐

