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
新星: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