Algolia搜索(Scout)有多个字段

时间:2017-10-24 08:04:59

标签: laravel algolia

让'说我想为拥有多个办公室的大公司创建一本电话簿。 我的数据库由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进行研究并为查询添加过滤器(城市和角色)?

我应该如何存储角色?纯文本 ?

谢谢

1 个答案:

答案 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/

如果这对您有用,请告诉我。