首页 > 解决方案 > 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。

标签: phpmysqllaravellaravel-scout

解决方案


不幸的是,目前这似乎无法使用 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


推荐阅读