php - 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 字段上构建一个拆分器。任何帮助将不胜感激!
解决方案
推荐阅读
- ffmpeg - 如何将 ffmpeg 命令转换为使用 ffmpy?
- java - 处理后台运行的线程安全计数器
- java - 通过 WMQ 在 Camel 中处理不正确的相关 ID
- android - 如果用户开始在从 A 到 A 的圆形路径旅行,我如何在我的 android 应用程序中集成谷歌地图,该地图将计算回合数
- windows - windows转说powershell无法实例化:公共语言运行库检测到无效程序
- python - 使用 pred 框坐标裁剪图像
- mongodb - oplog 收集在 mongodb 中是如何工作的?
- sympy - MatrixSymbol 上的符号减少
- android - Android firebase 通知,BigPicture 和 BigContentTitle
- python - 关于字符串中的循环和最终序列的代码问题