如何在Laravel scout中使用whereHas方法,

如何在Laravel scout中使用whereHas方法,,laravel,full-text-search,Laravel,Full Text Search,我一直在尝试在“姓名”列和“关系”列中搜索。我的代码如下; /// 我已经建立了一个可搜索的模型。我想改变搜索方法如下 $posts = ContentForSearch::search($search)->orWhere(function ($query) use ($search) { $query->whereHas('tags', function ($q) use ($search) {

我一直在尝试在“姓名”列和“关系”列中搜索。我的代码如下; ///

我已经建立了一个可搜索的模型。我想改变搜索方法如下

$posts = ContentForSearch::search($search)->orWhere(function ($query) use ($search) {
                    $query->whereHas('tags', function ($q) use ($search) {
                        $q->where('tag', 'LIKE', "%{$search}%");
                    });
                })
                ->orderBy($sort, $order)
                ->paginate($limit)->load("content_type","content_sub_type");
为什么代码不起作用?如何修复它?

模型为:

class ContentForSearch extends Model{
 use Searchable;

 protected $table = 'content';

 public function searchableAs()
 {
    return 'contents_index';
 }
 public function toSearchableArray()
 {
    $array = $this->toArray();

    // Customize array...

    return ["name"=> null];
 }

 public function content_type()
 {

    return $this->belongsTo(ContentType::class, 'content_type_id');

 }
 public function tags()
 {
    return $this->belongsToMany(ContentTag::class, 'content_content_tags', 'content_id', 'content_tags_id')->withTimestamps();
 }
 // * * *

全文搜索使用
algolia
elastic
的方式,您想要保留
whereHas()
关系方法似乎有些奇怪。在我看来,这是一个非此即彼的情况,要么你想要sql关系搜索,要么你想要全文,如果你想要全文,我会把所有标签映射到索引构建。所以像这样的东西会有用的

public function toSearchableArray()
{
    $customArray = $this->toArray();

    $index = 1;
    $this->tags->each(function(Tag $tag) use (&$customArray, &index) {
        $customArray['tag' . $index++] = $tag->tag;
    });

    return $customArray;
}
这将导致与此类似的对象被索引

{
    'name' => 'x',
    'tag1' => 'comment',
    'tag2' => 'post',
}
现在搜索将提供类似的功能

ContentForSearch::search($search);

给出了误差;语法错误,意外的“索引”(T_字符串),期望变量(T_变量)我需要一行代码和你的代码,发布的代码似乎很好。你对这一行有进一步的了解吗?这应该是非常直接的解决方法,用代码更新你的问题,让我们看看它?正如我们所说,在生产中有类似的解决方案
ContentForSearch::search($search);