laravel - How can create a Nova filter to filter a resource by its relation?
问题描述
I have a question resource that has many categories (many to many relation). I would like to create a filter the question resource for different categories.
<?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();
}
}
解决方案
$query
是类型\Illuminate\Database\Eloquent\Builder
,不能使用 Eloquent 模型方法categories()
。
尝试使用如下所示的连接。category_question
是中间表。我没有测试过,希望对你有帮助。
return $query
->join('category_question as cq', 'questions.id', 'cq.question_id')
->where('cq.category_id', $value)
->get();
推荐阅读
- pandas - 如何在多个值上过滤熊猫中的单列(dtype = object)
- swift - 如何使用户定义的运行时属性在 xcode 10.2.1 和 ios 12.2 中起作用
- java - `p12` 文件在 Firefox RestClient 中有效,但在 WebSphere 中无效
- r - `scale_color_gradient` 中的 `expand` 参数被忽略
- python - 如何改进我在熊猫中的布尔索引?
- javascript - 尝试在 Facebook 上上传图片时出现“(#324)需要上传文件”错误
- node.js - firebase 部署后的“array.forEach 不是功能”,但适用于 firebase 服务
- java - 如何指定应用使用 WiFi 而不是 3G/4G?
- angular - Angular 在 div 可见时显示图表
- php - Codeigniter XSS 过滤忽略 % 符号