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

Laravel Nova v3 intermittent search results at global and resource level

新星:v3.8.2 Laravel: 7

我有一个 Laravel Nova 应用程序,其中包含以下 App/Nova/User。php 资源:

/**
 * 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