Laravel Scout + Meilisearch + Sail:搜索方法不存在

问题描述 投票:0回答:1

我在尝试使用美丽搜索进行搜索时遇到错误:

“方法 Laravel\Scout\Builder::search 不存在。”

这是我正在使用的设置:

我按照文档通过运行以下命令来安装 Scout:

composer require laravel/scout

然后我使用以下方式发布了配置文件:

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

我将 Searchable 特征添加到我的模型中,如下所示:

use Laravel\Scout\Searchable;

class Organization extends Model {
    use Searchable;

    public function toSearchableArray() {
        // All model attributes are made searchable
        $array = $this->toArray();

        // Add some additional attributes
        $array['contact'] = $this->contact->toArray();
    }
}

之后,我运行了命令:

sail php artisan scout:import "Modules\Organizations\Models\Organization"

此后,我可以看到美丽搜索仪表板并查看索引的数据。

在尝试搜索时,我使用以下代码:

class GetOrganizations {
    use AsInertia;
    use SimpleIndexAction {
        rules as traitRules;
        getValidationData as traitGetValidationData;
    }

    protected $modelClass = Organization::class;

    public function scope() {
        $scope = Organization::search($this->search);
        return $scope;
    }

    public function jsonResponse($organizations) {
        return OrganizationResource::collection($organizations)->paginate(50);
    }

    public function htmlResponse($organizations) {
        return inertia()->render('Organizations/Index', [
            'title' => 'Organizations',
            'organizations' => inertia()->lazy(fn() => $organizations->latest()->paginate(50)->withQueryString()),
            'search' => request('search'),
        ]);
    }
}

加载视图后,所有信息均正确显示。但是,当我尝试搜索参数并将其发送到范围方法时,我收到错误

"Method Laravel\Scout\Builder::search does not exist."

我不确定我在这里错过了什么。任何帮助将不胜感激。

php laravel laravel-sail meilisearch
1个回答
0
投票
use Laravel\Scout\Searchable;

class Organization extends Model
{
    use Searchable;

    public function toSearchableArray()
    {
        // All model attributes are made searchable
        $array = $this->toArray();

        // Add some additional attributes
        $array['contact'] = $this->contact->toArray();

        return $array; // Seems to be missing in your code
    }
}

您应该归还

toSearchableArray
文档


但是,当我尝试搜索并将参数发送到范围方法时,我收到错误

"Method Laravel\Scout\Builder::search does not exist."

public function scope()
{
    $scope = Organization::search($this->search);
    return $scope;
}

函数

search
将返回
\Laravel\Scout\Builder
参考

要查看

\Laravel\Scout\Builder
公开的函数列表,请使用此 link

所以这取决于函数

scope
在您的应用程序中的使用方式。如果您的目的是获取搜索结果,您可以使用该功能
get

public function scope()
{
    return Organization::search($this->search)->get();
}

另外,您检查过

$this->search
是否包含搜索查询吗?

© www.soinside.com 2019 - 2024. All rights reserved.