让'说我想为拥有多个办公室的大公司创建一本电话簿。 我的数据库由3个表组成: - 用户 - 城市(代表办公室的位置) - 角色(用户可以拥有多个角色)
我想创建一个包含3个不同字段的表单来执行查询,我该怎么做?
现在我只有1个字段,这是我的主要模型用户
```
public function city()
{
return $this->belongsTo(City::class);
}
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function toSearchableArray()
{
$office = $this->city;
$array = [
'name' => $this->name,
'phone' => $this->phone,
'postal_code' => $office->postal_code,
'city' => $office->name,
];
return $array;
}
```
您如何使用Algolia进行研究并为查询添加过滤器(城市和角色)?
我应该如何存储角色?纯文本 ?
谢谢
答案 0 :(得分:6)
Scout仅支持where
子句中的数字:https://laravel.com/docs/5.5/scout#where-clauses
我建议也存储办公室的ID,并搜索:
User::search('')->where('office_id', 2)->get();
对于Roles,因为您有多个值,所以应该将它们存储为数组。
您不能在数组上使用where
,因此您需要利用callback参数在options数组中添加filter
条目。
User::search('', function ($algolia, $query, $options) {
$options = array_merge($options, [
'filters' => 'roles:engineer'
]);
return $algolia->search($query, $options);
})->get();
您可以在此处找到Algolia关于过滤的文档:https://www.algolia.com/doc/guides/searching/filtering/
如果这对您有用,请告诉我。