Laravel Nova: Множественные поля
28.10.2021
68

Laravel Nova: Множественные поля

Множественные поля для Laravel Nova основаны на хранении данных в json формате свойства модели.


GitHub


Установка:

composer require zetrider/nova-inputs-field


Свойство поля в базе данных должно быть текстового типа. 


Например:


$table->text('fields')->nullable();
// или
$table->longText('fields')->nullable();
// или
$table->json('fields')->nullable();


Данные хранятся в json формате, где:

Ключ: ключ поля

Значение: строка или массив, зависит от типа поля и атрибута 'multiple'. Чекбокс состоит всегда массива.


Пример данных:


[{"exampleTest":"Hello","exampleColor":"#005a9e","exampleDate":"2021-10-28","exampleSelect":"value1","exampleMultiple":["value2","value3"],"exampleCheckbox":["value1","value2"],"exampleRadio":"value3"}]


Модель должна преобразовать поле в массив:


/**
    * The attributes that should be cast.
    *
    * @var array
*/
protected $casts = [
    'fields' => 'array',
];


Nova ресурс


Класс NovaInputsField это стандартное поле Nova.


При помощи методов возможно добавить поля:


- input(string $key, array $attributes)

- select(string $key, array $attributes, array $options)

- checkbox(string $key, array $attributes, array $options)

- radio(string $key, array $attributes, array $options)


$key - используется как ключ объекта json

$attributes - массив с поддерживаемыми атрибутами html тега. При передаче атрибута placeholder, для checkbox и radio полей будет использован как заголовок.

$options - варианты опций для поля. Ключ массива - значение опции. Значение массива - название опции.


Пример:



use ZetRider\NovaInputsField\NovaInputsField;

public function fields(Request $request)
{
    return [
        NovaInputsField::make('Some field', 'fields')
            // Simple text field
            ->input('exampleTest', ['type' => 'text', 'placeholder' => 'Type here...'])
            // Color field
            ->input('exampleColor', ['type' => 'color'])
            // Date field
            ->input('exampleDate', ['type' => 'date', 'min' => now()->format('Y-m-d')])
            // Simple select
            ->select('exampleSelect', ['placeholder' => 'Select option...'], [
                'value1' => 'Option1',
                'value2' => 'Option2',
                'value3' => 'Option3'
            ])
            // Multiple select
            ->select('exampleMultiple', ['placeholder' => 'Select option...', 'multiple' => 'multiple', 'style' => 'height: 100px;'], [
                'value1' => 'Option1',
                'value2' => 'Option2',
                'value3' => 'Option3'
            ])
            // Checkbox
            ->checkbox('exampleCheckbox', ['placeholder' => 'Choice option'], [
                'value1' => 'Check1',
                'value2' => 'Check2',
                'value3' => 'Check3'
            ])
            // Radio
            ->radio('exampleRadio', ['placeholder' => 'Some title'], [
                'value1' => 'Radio1',
                'value2' => 'Radio2',
                'value3' => 'Radio3'
            ]),
    ];
}


или


NovaInputsField::make('Prices', 'prices')
    ->select('type', [], ['base' => 'Base', 'sale' => 'Sale'])
    ->input('price', ['type' => 'nubmer', 'min' => '1', 'step' => '0.01']),


GitHub

Источник: ZetRider
Вывод Builder SQL запроса с переданными значениями
09.11.2021
57
Вывод Builder SQL запроса с переданными значениями

Для анализа SQL запросов в Laravel из коробки присутствует метод toSql класса \Illuminate\Database\Eloquent\Builder. Но данный метод возвращает п...

Читать →
Тестирование и отладка роутов Laravel при помощи DebugBar
09.10.2021
107
Тестирование и отладка роутов Laravel при помощи DebugBar

Для тестирования роутов на наличие дубликата sql запросов, потребления памяти или времени загрузки можно использовать удобный интерфейс laravel-debugb...

Читать →
Laravel Nova - Как вывести в трендах сумму за период
24.02.2021
627
Laravel Nova - Как вывести в трендах сумму за период

В Laravel Nova удобно отображать метрики через тренды. Создавая периоды можно получить информацию например о новых пользователях в системе. В одном пр...

Читать →