我正在为Laravel Scout使用Laravel 5.5和TNTSearch引擎。我偶然发现的问题是与Eloquent关系以及我是否可以对它们进行条件检查。 Laravel Scout包含一个类似Eloquent的where function
,但它是一个愚蠢的版本,只允许列检查而不是其他任何内容。
搜索控制器
protected function search()
{
$query = request()->input('query');
$meta = $this->searchMeta($query, 10);
$items = $this->searchItems($query, 10);
return view('model.search.index')->with([
'meta' => $meta,
'items' => $items
]);
}
protected function searchMeta($query, $limit = 100)
{
return ItemMeta::search($query, function ($tntsearch, $query, $options) use ($limit) {
return $tntsearch->search($query, $limit);
})->where('company_id', \Auth::user()->company_id)->get();
}
protected function searchItems($query, $limit = 100)
{
return Item::search($query, function ($tntsearch, $query, $options) use ($limit) {
return $tntsearch->search($query, $limit);
})->get(); // Need to be restricted to company
}
我想要做的目标是检查项目是否与当前用户的公司相关。我通过在项company_id column
上设置Meta table,
然后有一个名为"meta_id"
的列,这是Meta的外键。
当项目使用关系检查用户是否有权访问时,我如何仅显示当前公司的结果?如果使用Laravel Scout或TNTSearch引擎是不可能的,有没有人知道允许我这样做的替代方案?