0

如何对searcable()查询生成器返回的结果使用方法?假设有五个表:

  1. 产品
  2. 供应商
  3. 类别
  4. vendor_products(产品和供应商的数据透视表)
  5. product_categories(产品和类别的数据透视表)

有没有办法在以下查询中使用可搜索:

   return \DB::table("products")
      ->join('vendor_products', function ($join) {
          $join->on('products.id', '=', 'vendor_products.product_id')
               ->MANY_OTHER_WHERE_CONDITIONS
      })
      ->join('categories', function ($join) {
          $join->on('category_id', '=', 'categories.id');
      })
      ->MANY_OTHER_CONDITIONS
      ->searchable()

但是 Laravel Scout 返回错误:

Call to undefined method Illuminate\Database\Query\Builder::searchable()  

有没有办法上传上述查询的结果?我在供应商、类别和产品模型上添加了可搜索的特征。

看起来 Scout 仅在我们从查询返回 Eloquent 关系并且不适用于查询构建器时才有效。

4

2 回答 2

1

根据Laravel 文档

Laravel Scout 提供了一个简单的、基于驱动程序的解决方案,用于将全文搜索添加到您的Eloquent 模型中。

查询生成器没有此功能。

相反,您可以实施的一个不那么花哨的解决方案是使用WHERE LIKE. 这假设了一个更慢的功能,Laravel Scope但如果你不想使用 Eloquent.

我的建议是使用Eloquent. 是一种在使用 laravel 时更快速、更轻松地使用数据库的方法

于 2017-12-28T12:27:30.107 回答
1

问题已解决,所有功劳归@kfirba。从他的博客复制他的回复

searchable() 方法仅适用于 Eloquent 的查询构建器。尝试将上面的查询转换为使用 Eloquent。将 DB::table('products')->join... 更改为 Products::join...

您可能需要更改“toSearchableArray()”方法实现以包含不属于 Product 模型的新字段(vendor_quantity、vendor_price 等)

于 2017-12-28T12:44:31.807 回答