我正在使用 Laravel 5.5 和 Laravel Scout 的 TNTSearch 引擎。我偶然发现的问题与 Eloquent 关系以及我是否可以为它们进行条件检查有关。Laravel Scout 包含一个where function
类似的 Eloquent,但它是它的简化版本,只允许列检查而没有其他功能。
搜索控制器
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,
Item 上有一个然后有一个称为"meta_id"
Meta 的外键的列来做到这一点。
当项目使用关系来检查用户是否具有访问权限时,我将如何仅显示当前公司的结果?如果 Laravel Scout 或 TNTSearch 引擎无法实现,有没有人知道可以让我这样做的替代方案?