一个滤波器到另一个滤波器的LaravelNova通值

我试图使用 2“选择过滤器”过滤 Laravel Nova 资源(评论)数据。

我试图使用 2“选择过滤器”过滤 Laravel Nova 资源(评论)数据。

我有一个过滤器 A = 制造商和过滤器 B = 模型。

一个制造商有很多型号。我在产品表中有制造商和型号列。

默认情况下,“模型”过滤器显示选择下拉列表中的所有值。我想在选择“制造商”时减少“模型”过滤器中的选择选项。

所以,例如:当制造商 =“苹果”那么“模型”过滤器应该只显示苹果“模型”。

在我的评论资源中,我有以下代码:

/**
 * Get the filters available for the resource.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function filters(Request $request)
{
    return [
        new Manufacturer(),
        new Model(),
    ];
}

制造商筛选器代码

class Manufacturer extends Filter
{
    
    /**
     * The filter's component.
     *
     * @var string
     */
    public $component = 'select-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->whereHas('product', function ($query) use ($value) {
        $query->where('manufacturer', $value);
    });
}
/**
 * Get the filter's available options.
 *
 * @param \Illuminate\Http\Request $request
 *
 * @return array
 */
public function options(Request $request)
{
    return Product::select('manufacturer')
        ->withoutGlobalScopes()
        ->withoutTrashed()
        ->groupBy('manufacturer')
        ->orderBy('manufacturer')
        ->pluck('manufacturer')
        ->mapWithKeys(function ($manufacturer) {
            return [$manufacturer => strtolower($manufacturer)];
        })
        ->toArray();
}

}

模型筛选器代码

class Model extends Filter
{
    
    /**
     * The filter's component.
     *
     * @var string
     */
    public $component = 'select-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->whereHas('product', function ($query) use ($value) {
        $query->where('model', $value);
    });
}
/**
 * Get the filter's available options.
 *
 * @param \Illuminate\Http\Request $request
 *
 * @return array
 */
public function options(Request $request)
{
    //
    //
    //I want to add a condition below ->where('manufacturer', $manufacturer)
    //
    //
    return Product::select('model')
        ->withoutGlobalScopes()
        ->withoutTrashed()
        ->groupBy('model')
        ->orderBy('model')
        ->pluck('model')
        ->mapWithKeys(function ($model) {
            return [$model => strtolower($model)];
        })
        ->toArray();
}

}

我试图解码 $请求来获取过滤器值,但返回 null。

0

我发现图书馆,帮助实现正是我想要的。

该库可以在这里找到:https://github.com/awesome-nova/dependent-filter

一旦安装了上面的库,就可以设置两个过滤器,如下所示:

Filter A
<?php
namespace App\Nova\Filters;
use Illuminate\Http\Request;
use App\Models\Product;
use AwesomeNova\Filters\DependentFilter;
class Manufacturer extends DependentFilter
{
/**
 * Name of filter.
 *
 * @var string
 */
public $name = 'Manufacturer';
/**
 * Attribute name of filter. Also it is key of filter.
 *
 * @var string
 */
public $attribute = 'manufacturer';
/**
 * The filter's component.
 *
 * @var string
 */
public $component = 'awesome-nova-dependent-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->whereHas('product', function ($query) use ($value) {
        $query->where('manufacturer', $value);
    });
}
/**
 * Get the filter's available options.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function options(Request $request, array $filters = [])
{
    return Product::select('manufacturer')
        ->pluck('manufacturer')
        ->mapWithKeys(function ($manufacturer) {
            return [$manufacturer => $manufacturer];
        })->toArray();
}
Filter B
<?php
namespace App\Nova\Filters;
use App\Models\Product;
use Illuminate\Http\Request;
use AwesomeNova\Filters\DependentFilter;
class Model extends DependentFilter
{
    /**
     * Name of filter.
     *
     * @var string
     */
    public $name = 'Model';
    
    /**
     * Attribute name of filter. Also it is key of filter.
     *
     * @var string
     */
    public $attribute = 'model';
    
    /**
     * The filter's component.
     *
     * @var string
     */
    public $component = 'awesome-nova-dependent-filter';
    /**
     * The filter's dependentOf.
     *
     * @var array
     */
    public $dependentOf = ['manufacturer'];
    public $hideWhenEmpty = true;
    /**
     * 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->whereHas('product', function ($query) use ($value) {
            $query->where('model', $value);
        });
    }
    /**
     * Get the filter's available options.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function options(Request $request, array $filters = [])
    {
        return Product::select('model')
            ->where('manufacturer', $filters['manufacturer'])
            ->pluck('model')
            ->mapWithKeys(function ($model) {
                return [$model => $model];
            })->toArray();
    }
}

资源文件

public function filters(Request $request)
{
    return [
        Manufacturer::make(),
        Model::make(),
    ];
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(639)
PowerBI:报告发布后切片器不起作用
上一篇
登录前带光标的黑屏(windows black screen on boot)
下一篇

相关推荐

  • php框架:使用 Laravel 框架开发应用程序

    PHP框架是一种用于快速开发Web应用程序的软件结构。它使用一系列的类和函数,以及一组组织代码的规则,帮助开发人员更快地开发Web应用程序。它还可以提供一个可重复使用的结构,以便可以更快地开发更多的应用程序。…

    2023-09-12 06:32:21
    0 85 52
  • php laravel教程:如何使用Laravel框架开发Web应用

    PHP Laravel 教程是一种基于 PHP 的 Web 开发框架,用于快速开发安全、可扩展的 Web 应用程序。它提供了许多功能,使您可以轻松构建功能丰富的 Web 应用程序,从而提高生产力。…

    2024-04-17 04:16:58
    0 52 57
  • php前端框架:使用Laravel构建强大的Web应用

    PHP前端框架是一种基于PHP语言的Web应用程序开发框架,它使用MVC(Model-View-Controller)模式将应用程序的后端逻辑与前端表示分离。它可以帮助开发人员更快地构建功能丰富的Web应用程序,并使用更少的代码。…

    2023-01-25 01:47:01
    0 91 49
  • php 框架排行Laravel、Symfony和Yii

    示例示例PHP 框架排行是指根据使用的 PHP 框架的数量来统计排名的一种方式。根据目前的市场情况,下面是目前 PHP 框架排行榜:Laravel:Laravel 是一个开源的 PHP Web 开发框架,它使用了一系列的 PHP 组件,可以帮助开发者更快速、简单地构建出功能强大的 Web 应用程序。…

    2023-03-18 13:38:45
    0 78 14

发表评论

登录 后才能评论

评论列表(68条)