使用 Laravel Scout 的 laravel-scout-tntsearch-driver 包进行关系搜索

pwn*_*z22 5 php mysql laravel-5 laravel-scout

我正在为 Laravel Scout使用laravel-scout-tntsearch-driver包。我已经实施了,一切正常。但现在我想做一个关系搜索。我的城市有很多公司。

城市.php

public function companies()
{
    return $this->hasMany(Company::class);
}
Run Code Online (Sandbox Code Playgroud)

公司.php

public function city()
{
    return $this->belongsTo(City::class);
}

public function toSearchableArray()
{
    return [
        'id' => $this->id,
        'title' => $this->title
    ];
}
Run Code Online (Sandbox Code Playgroud)

现在搜索只适用于所有公司。

Company::search('bugs bunny')->get();
Run Code Online (Sandbox Code Playgroud)

还有 where 子句在这里不起作用。我想要这样的东西:

Route::get('/search/{city}', function (\App\City $city) {
    $companies = $city->companies()->search('bugs bunny');
});
Run Code Online (Sandbox Code Playgroud)

我想你明白了。谢谢!

Nil*_*ria 0

首先,我会将逻辑移至控制器。完成此操作后,您可以在控制器中使用一个方法来实现所需的搜索,如下所示:

public function search(City $city){
    $companiesInCity = Company::where('city_id', $city->id)->get('id')->toArray();
    $companiesMatching = Company::search('bugs bunny')->whereIn('id', $companiesInCity)->get();
           
   
    return view('search.result', [
        'result' => $result
    ]);
}
Run Code Online (Sandbox Code Playgroud)

最后从路由 web.php 调用该函数。

在我的开发环境中工作。

希望这可以帮助!