bourne/nova-select2-filter

一个 Laravel Nova 过滤器。

dev-master 2021-03-06 07:17 UTC

This package is auto-updated.

Last update: 2024-09-11 22:12:46 UTC


README

支持单选和多选

multi

安装

composer require angauber/nova-select2-filter

用法

使用以下命令创建一个新的过滤器

php artisan nova:filter MyNewFilter

然后替换其内容如下

<?php
    
    namespace App\Nova\Filters;
    
    use Illuminate\Database\Eloquent\Builder;
    use Illuminate\Http\Request;
    use Angauber\NovaSelect2Filter\NovaSelect2Filter;
    
    class ContactType extends NovaSelect2Filter
    {
    	public $component = 'nova-select2-filter';
    
    	public function apply(Request $request, $query, $value) {
    		return $query;
    	}
    
    	public function options(Request $request) {
    		return [];
    	}
    
    	public function config() {
    		return [
    				'multiple' => true,
    				'allowClear' => true,
    				'placeholder' => 'Choose option(s)',
    		];
    	}
    }

apply() 方法的 $value 参数将根据 config 方法中 multiple 是否设置为 truefalse 而是字符串数组或字符串

option() 方法必须返回一个 key => value 的数组

config() 方法必须返回包含 select2 配置参数的数组。请参阅 Select2 文档

示例

假设你想要在多对多关系上对用户模型进行多选过滤,你可以这样做

    <?php
    
        namespace App\Nova\Filters;
    
    	use Illuminate\Database\Eloquent\Builder;
    	use Illuminate\Http\Request;
    	use Angauber\NovaSelect2Filter\NovaSelect2Filter;
    	use \App\Models\UserType;
    
    	class ContactType extends NovaSelect2Filter
    	{
    		public $component = 'nova-select2-filter'
    
    		public function apply(Request $request, $query, $value) {
    		    return $query->whereHas('type', function(Builder $query) use ($value) {
    		        $query->whereIn('types.id', $value)
    		    });
    		}
    
    		public function options(Request $request) {
    			return UserType::p"luck('username', 'id');
    		}
    
    		public function config(): array {
    		    return [
    				'multiple' => true,
    				'allowClear' => true,
    				'placeholder' => 'Choose option(s)',
    			];
    		}
    	}