【问题标题】:How can create a Nova filter to filter a resource by its relation?如何创建 Nova 过滤器以按关系过滤资源?
【发布时间】:2018-10-17 13:17:18
【问题描述】:

我有一个包含许多类别(多对多关系)的问题资源。我想为不同类别的问题资源创建一个过滤器。

<?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();
    }
}

【问题讨论】:

    标签: laravel laravel-nova


    【解决方案1】:

    $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();
    

    【讨论】:

      【解决方案2】:

      就像查询任何关系一样,您想使用闭包。

      public function apply(Request $request, $query, $value)
      {
          return $query->whereHas('categories', function($query) use ($value) {
              $query->where('id', $value);
          });
      }
      

      【讨论】:

        猜你喜欢
        • 2019-03-08
        • 1970-01-01
        • 2017-12-31
        • 2021-12-15
        • 2019-06-16
        • 2020-07-24
        • 1970-01-01
        • 1970-01-01
        • 2019-03-28
        相关资源
        最近更新 更多