最好的方法是在发送到 Algolia 的数据中添加餐厅 int 属性,以便您可以依赖“where”属性。我不知道您的数据是什么样的,因此代码可能需要一些修改。
哪里非常有限,它只能在整数上进行相等的操作:https ://laravel.com/docs/scout#where-clauses
解决方案一:使用where
方法
首先,覆盖该toSearchableArray
方法以具有类似的内容:
public function toSearchableArray()
{
$record = $this->toArray();
$record['has_resturant'] = (int) !empty($this->restaurants);
return $record;
}
使用命令重新索引所有内容php artisan scout:import "App\User"
解决方案 2:Algolia 宏包
将此包添加到您的项目中:https ://github.com/algolia/laravel-scout-algolia-macros
创建restaurant_count
属性
public function toSearchableArray()
{
$record = $this->toArray();
$record['resturant_count'] = count($this->restaurants);
return $record;
}
重新索引。
用这种方式搜索:
User::search('Chris')->with('filters' => 'restaurant_count>0')->get();
让我知道这是否对你有用。