首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以使用可排序()函数在拉拉灯丝,可用于排序的职位根据优先级?

是否有一种方法可以使用可排序()函数在拉拉灯丝,可用于排序的职位根据优先级?
EN

Stack Overflow用户
提问于 2022-09-16 05:59:25
回答 1查看 398关注 0票数 0

如何在laravel长丝中的sortable()函数中实现自定义比较器函数?我有三个优先级:高、中和低,我希望它们按高、中和低排序,反之亦然,而不是按照orderBy函数所做的升序或降序排序。我希望它在$table列的$table中。

代码语言:javascript
复制
<?php

namespace App\Filament\Resources;

use App\Filament\Resources\IdeaResource\Pages;
use App\Filament\Resources\IdeaResource\RelationManagers;
use App\Models\Idea;
use App\Models\User;
use DeepCopy\Filter\Filter;
use Filament\Forms;
use Filament\Forms\Components\Actions\Modal\Actions\Action;
use Filament\Forms\Components\Select;
use Filament\Resources\Form;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables;
use Filament\Tables\Columns\BadgeColumn;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\DatePicker;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\Filter as FiltersFilter;

class IdeaResource extends Resource
{
    protected static ?string $model = Idea::class;

    protected static ?string $navigationIcon = 'heroicon-o- 
  collection';

public static function form(Form $form): Form
{
    return $form
        ->schema([
            Forms\Components\Card::make()
                ->schema([
                    Forms\Components\TextInput::make('title')
                        ->label('Title')
                        ->required(),

                    DatePicker::make('publishing_date')
                        ->label('Publishing Date')
                        ->minDate('today'),

                    // Forms\Components\MarkdownEditor::make('short_description')
                    //     ->label('Short Description')
                    //     ->columnSpan("full")
                    //     ->required(),

                    Select::make('priority')
                        ->options([
                            'high' => 'High',
                            'medium' => 'Medium',
                            'low' => 'Low'
                        ])->required(),
                ])
                ->columns(2)
                ->columnSpan(['lg' => fn (?Idea $record) => $record === null ? 3 : 2]),

            Forms\Components\Card::make()
                ->schema([
                    Forms\Components\Placeholder::make('created_at')
                        ->label('Created at')
                        ->content(fn (Idea $record): string => $record->created_at->diffForHumans()),

                    Forms\Components\Placeholder::make('updated_at')
                        ->label('Last modified at')
                        ->content(fn (Idea $record): string => $record->updated_at->diffForHumans()),
                ])
                ->columnSpan(['lg' => 1])
                ->hidden(fn (?Idea $record) => $record === null),
        ])
        ->columns(3);
}

public static function table(Table $table): Table
{
    return $table
        ->columns([
            Tables\Columns\TextColumn::make('title')
                ->label('Title')
                ->searchable()
                ->sortable(),
            Tables\Columns\TextColumn::make('publishing_date')
                ->label('Publishing Date')
                ->searchable()
                ->date()
                ->sortable(),
            BadgeColumn::make('priority')
                ->label('Priority')
                ->colors([
                    'primary',
                    'danger' => 'high',
                    'warning' => 'medium',
                    'success' => 'low',
                ])->sortable(query: function (Builder $query, string $direction): Builder {
                    return $query
                    ->orderByRaw("FIELD(priority, 'high', 'medium', 'low') ASC");
                    // ->orderByRaw("FIELD(priority, 'low', 'medium', 'high') DESC");
                    // ->orderByCase("
                    //     WHEN priority='high' then 1
                    //     WHEN priority='medium' then 2
                    //     WHEN priority='low' then 3
                    //     ");
                    // ->orderBy('priority', 'asc');
                }),
            ])
        ->filters([
            // 
        ])
        ->actions([
            Tables\Actions\Action::make('Push To Task')
                ->url(fn (Idea $record): string => route('idea', $record))
                ->icon('heroicon-s-check'),
            Tables\Actions\EditAction::make()
                ->icon('heroicon-s-pencil'),
        ])
        ->bulkActions([
            Tables\Actions\DeleteBulkAction::make(),
        ]);
}

public static function getRelations(): array
{
    return [
        //
    ];
}

public static function getPages(): array
{
    return [
        'index' => Pages\ListIdeas::route('/'),
        'create' => Pages\CreateIdea::route('/create'),
        'edit' => Pages\EditIdea::route('/{record}/edit'),
    ];
}

}

这是优先级列,当用户单击优先级列的小按钮时,需要通过高、中和低来排序。

EN

回答 1

Stack Overflow用户

发布于 2022-10-28 22:12:41

我不认为您的逻辑是合理的,因为排序通常用于以某种方式扫描表,我相信您需要的是根据与您的想法模型相关的类别进行过滤。

灯丝有一个三元过滤器,在你的情况下可以用来过滤优先级。

三元过滤器允许您快速创建一个过滤器,它有三种状态--通常为真、假和空。

三值滤波器

使用您的场景的示例如下:

代码语言:javascript
复制
TernaryFilter::make('priority')
    ->placeholder('High')
    ->trueLabel('Medium')
    ->falseLabel('Low')
    ->queries(
        true: fn (Builder $query) => $query->where('priority', 'medium'),
        false: fn (Builder $query) => $query->where('priority', 'low'),
        blank: fn (Builder $query) => $query->where('priority', 'high'),
    )

免责声明:此方法没有用于其预期目的,但在您的情况下可能很有用。干杯。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73740463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档