首页 > 解决方案 > Laravel Scout - 来自一个模型的多个可搜索数组

问题描述

我正在尝试通过迭代其关系,从单个 City 模型在 Laravel Scout 中创建单独的可搜索数组。我有多个字段返回数组,都与同一个 hasMany 关系相关联。

虽然 Algolia 可以在返回搜索结果时解析数组,但对象中存在多个数组会导致问题。

例如,当前结果是{city_name: 'Sydney', user_name: ['user_one', 'user_two'], user_id: [1, 2]}。预期的结果是两个对象:{city_name: 'Sydney', user_name: 'user_one', user_id: 1}{city_name: 'Sydney', user_name: 'user_two', user_id: 2}

Region->cities 是多对多关系,Region->user 是一对多关系。

由于toSearchableArray返回单个可搜索对象,我尝试(不成功)使用以下方法覆盖它searchable()

城市.php:

public function users()
{
    $regionIds = $this->regions()
        ->has('users') // filters regions with no users
        ->pluck('id');

    return User::whereHas('regions', function($q) use ($regionIds) {
        $q->whereIn('regions.id', $regionIds);
    })->get(['name','id']);
}

public function toSearchableArray()
{
    $array = $this->to_array;

    foreach($this->users() as $user)
    {
        $array['user_name'] = $user->name;
        $array['user_id'] = $user->id;
        $array->searchable();
    }

    return [];
}

Call to a member function searchable() on array当我尝试索引时返回,searchable()必须在查询中调用。我正在尝试找出一个查询,该查询允许我通过区域关系一次附加一个用户。另一种可能的选择是用数组索引一个对象,并在 user_name 和 user_id 字段上构建一个拆分器。任何帮助将不胜感激!

标签: phplaraveleloquentalgolialaravel-scout

解决方案


推荐阅读