Как сделать доп. поля для laravel с зависимостью от выбранной категории?

В Laravel вы можете легко добавлять дополнительные поля с зависимостью от выбранной категории, используя механизм миграций и моделей.

Шаг 1: Создание миграции
Сначала создадим миграцию для создания таблицы, содержащей дополнительные поля. Вы можете использовать команду php artisan make:migration add_additional_fields_to_table для создания новой миграции. Затем откройте созданный файл миграции и добавьте новые поля с помощью метода Schema::table.

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

class AddAdditionalFieldsToTable extends Migration
{
    public function up()
    {
        Schema::table('table_name', function (Blueprint $table) {
            $table->string('field1')->nullable();
            $table->integer('field2')->nullable();
            // и так далее
        });
    }

    public function down()
    {
        Schema::table('table_name', function (Blueprint $table) {
            $table->dropColumn('field1');
            $table->dropColumn('field2');
            // и так далее
        });
    }
}

Шаг 2: Создание модели
Далее создайте модель для вашей таблицы, используя команду php artisan make:model ModelName, заменяя ModelName на имя вашей модели. В модели определите атрибуты, которые соответствуют вашим дополнительным полям:

namespace AppModels;

use IlluminateDatabaseEloquentModel;

class ModelName extends Model
{
    protected $fillable = ['field1', 'field2', /* и так далее */];
}

Шаг 3: Работа с представлением и контроллером
Для добавления в представление выбора категории и соответствующих дополнительных полей, можно использовать HTML и JavaScript. Создайте форму в представлении, добавьте поле для выбора категории и обработчик события change, который будет динамически отображать/скрывать дополнительные поля, в зависимости от выбранной категории.

<form action="/some-route" method="POST">
    <!-- поле для выбора категории -->
    <select name="category" id="category-select">
        <option value="1">Category 1</option>
        <option value="2">Category 2</option>
        <!-- и так далее -->
    </select>

    <!-- дополнительные поля, скрытые по умолчанию -->
    <div id="additional-fields" style="display: none;">
        <input type="text" name="field1" placeholder="Field 1">
        <input type="number" name="field2" placeholder="Field 2">
        <!-- и так далее -->
    </div>

    <button type="submit">Submit</button>
</form>

<script>
    document.getElementById('category-select').addEventListener('change', function() {
        var categorySelect = document.getElementById('category-select');
        var additionalFieldsDiv = document.getElementById('additional-fields');

        if (categorySelect.value === '1') {
            additionalFieldsDiv.style.display = 'block';
        } else {
            additionalFieldsDiv.style.display = 'none';
        }
    });
</script>

В вашем контроллере вы можете получить введенные значения дополнительных полей и сохранить их в базу данных, используя модель:

namespace AppHttpControllers;

use AppModelsModelName;
use IlluminateHttpRequest;

class MyController extends Controller
{
    public function store(Request $request)
    {
        // получить значения дополнительных полей
        $data = $request->only(['field1', 'field2', /* и так далее */]);

        // сохранить значения в базу данных
        ModelName::create($data);

        // redirect или что-то еще
    }
}

Вы можете использовать этот подход для динамического добавления и отображения дополнительных полей в зависимости от выбранной категории в Laravel.