Laravel Nova v3全局和资源级别的间歇搜索结果

问题描述

Nova:v3.8.2 Laravel:7

我有一个带有以下App / Nova / User.PHP资源的Laravel Nova应用程序:

/**
 * The columns that should be searched.
 *
 * @var array
 */
public static $search = [
    'firstname','lastname','email','username'
];

使用全局或资源级别搜索时,您可以成功搜索用户名,姓氏和名字。但是,所有这些字段的搜索结果都是断断续续的。例如,整个用户都丢失了,或者对电子邮件的任何搜索都无法进行。

尽管如此,在App / User.PHP中,我们已将电子邮件设置为隐藏:

/**
 * The attributes excluded from the model's JSON form.
 *
 * @var array
 */
protected $hidden = [
    'email',];

可能与后者有关,但是我不确定如何在Nova用户资源中覆盖它。或可能完全是一个单独的问题。

解决方法

经过研究和进一步测试,我发现Nova默认使用Laravel Scout进行搜索。我错误地认为默认方法是数据库的直接索引。在我们的案例中,我们的Scout Algolia设置非常针对前端。例如,出于安全考虑,我们不包括电子邮件。此外,我们在本地测试的Algolia设置具有有限的记录集。测试时会导致搜索结果断断续续。

这里最好的解决方案是正确设置Algolia以支持Nova。但是,作为一种快速的解决方案,我们可以在Nova资源级别上禁用Scout:

public static function usesScout()
{
    return false;
}

https://github.com/laravel/nova-issues/issues/1349

Laravel Nova: Bypass the search with Scout