我在尝试使用美丽搜索进行搜索时遇到错误:
“方法 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."
我不确定我在这里错过了什么。任何帮助将不胜感激。
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
是否包含搜索查询吗?