问题描述
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;
}