我有一个具有很多类别(很多对很多关系)的问题资源。我想为不同类别的问题创建一个过滤器。
<?php
namespace App\Nova\Filters;
use Illuminate\Http\Request;
use Laravel\Nova\Filters\Filter;
class CategoryType extends Filter
{
/**
* Apply the filter to the given query.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Database\Eloquent\Builder $query
* @param mixed $value
* @return \Illuminate\Database\Eloquent\Builder
*/
public function apply(Request $request, $query, $value)
{
return $query->categories()->where('id', $value);
}
/**
* Get the filter's available options.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function options(Request $request)
{
$categories = \App\Category::all();
return $categories->pluck('id', 'name')->all();
}
}
答案 0 :(得分:1)
$query
类型为\Illuminate\Database\Eloquent\Builder
,不能使用口才模型方法categories()
。
尝试使用如下所示的连接。 category_question
是中间表。我尚未测试,希望对您有帮助。
return $query
->join('category_question as cq', 'questions.id', 'cq.question_id')
->where('cq.category_id', $value)
->get();
答案 1 :(得分:0)
就像查询任何关系一样,您想使用闭包。
public function apply(Request $request, $query, $value)
{
return $query->whereHas('categories', function($query) use ($value) {
$query->where('id', $value);
});
}