В 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.