php - Laravel 侦察员搜索关系
问题描述
我似乎无法弄清楚如何在 Laravel scout 的 1 个查询中搜索 2 个表。出于目前不重要的特定原因,我不想只运行原始查询。现在我有这个要搜索:
我的关系:
namespace App;
use Laravel\Scout\Searchable;
class Users extends Model
{
use Searchable;
public function searchableAs(){
return 'users_index';
}
public function toSearchableArray(){
return $this->toArray();
}
public function originalUser(){
return $this->belongsTo(OriginalUser::class);
}
}
这是控制器:
use App\OriginalUser;
use App\Users;
use App\Groups;
class SomeController extends Controller{
public function index(){
$group = Group::where('group_id',1)->first();
return Users::search('something')->where('group_id',$group->id)->get();
}
}
现在这将返回在其中一列中有“某物”的用户,这很好:
[
{
"id": "1",
"original_user_id": "1",
"username": "something"
"original_user": {
"id": "1",
"username":"test"
}
}
]
但我需要我的代码也返回此记录:
[
{
"id": "2",
"original_user_id": "2",
"username": "nope"
"original_user": {
"id": "2",
"username": "something"
}
}
]
因此,当它与结果的关系匹配时,我也希望返回该记录。我也尝试过制作OriginalUser
模型searchable
,但我只是停留在这一点上。
文档不够清楚,我无法了解如何实际获得关系列也与搜索值匹配的结果。我发现在官方文档中唯一能说明模型中关系的内容是:
// You may also add records via relationships...
$user->orders()->searchable();
我已经尝试过了,但它没有显示其他记录。(当然我在我的代码中更改orders
为)originalUser()
有谁知道如何使用 laravel scout 在 1 个“搜索”中搜索多个模型?
编辑: 我没有使用 Algolia,而是使用 mysql。
解决方案
不幸的是,目前这似乎无法使用 Scout 和 MySQL 驱动程序。
今天在自己周围寻找完全相同的问题的解决方案,我发现了一些建议,通过 toSearchAbleArray 方法在要搜索的模型上添加关系可能会做到这一点:https ://laracasts.com/discuss/channels/laravel/scout -如何在关系中搜索和计数?page=1#reply=329201
但这对我不起作用,因为 toSearchableArray 处理将潜在的搜索结果放在像 Algolia 这样的索引中,而 MySql 驱动程序不这样做。几个小时后,我在该主题的 repo 上发现了 2016 年的一个问题,这表明他们还没有开始实施这个:https ://github.com/yabhq/laravel-scout-mysql-driver/issues /5
推荐阅读
- android - 数据无法存储在实时数据库中
- azure - 如何在 AKS 上为负载均衡器服务设置域名
- swift - 情节提要中的 UITextView 设置在运行时未显示
- java - java.util.logging 配置属性文件中的 log4j.appender.console.target 等效项
- matlab - 如何在matlab中绘制矩阵,将矩阵索引视为xy轴上的坐标
- angular - 从 Express 后端更新 Angular UI
- python - pycharm控制台错误,控制台无法正常启动
- php - 从 php libsodium sodium_crypto_pwhash_str() 返回的长度
- javascript - 单击 VUE 在子组件上无法正常工作
- django - 视图 mysite.views.Attendancecreate 未返回 HttpResponse 对象。它返回 None 而不是