Создание новой таблицы в Laravel на основе ввода пользователем?

Я пытаюсь создать новые таблицы mysql на основе пользовательского ввода в Laravel Framework.

Пользователь отправляет форму, которая обрабатывается в контроллере, данные формы сохраняются, а затем создается НОВАЯ таблица на основе ввода пользователя (для получения данных позднее).

Таблицы laravel могут быть созданы с помощью schema :: create ()

Schema::create('newtablename', function($table){ $table->increments('id')->unique(); //primary key $table->string('columnname'); etc. }); 

По сути, я хочу это сделать, за исключением того, что на имени пользователя указаны имена таблиц и столбцов:

Пользовательский ввод представляет собой многомерный массив, подобный этому:

  $newtableschema = array( 'tablename' => 'tablename', 'colnames' => array('One', 'Two', 'Three', 'Four'); ); Schema::create($newtableschema['tablename'], function($table){ $table->increments('id')->unique(); //primary key foreach($newtableschema['colnames'] as $col){ $table->text($col); } etc. }); 

Ошибка, которую я получаю, состоит в том, что переменные не определены. Я не знаю, как предоставить пользователю вход в метод schema :: create.

Я не могу найти какой-либо метод в документации для создания таблиц таким образом или что-то подобное этому в течение последних 3 часов работы с поисковой системой. Красноречивый синтаксис меня иногда смущает, поэтому, возможно, мне не хватает чего-то очевидного.

Есть идеи? Или есть альтернативный чистый php / sql для этого?

Большое спасибо

edit: мои извинения, я сделал опечатку ранее в моем примере кода. Моя проблема в том, что я не знаю, как передать переменные, которые я хочу для схемы :: create ()

    Вы можете использовать use($newtableschema) чтобы передать переменную в closure :

     Schema::create($newtableschema['tablename'], function($table) use($newtableschema) { // So now you can access the $newtableschema variable here // Rest of your code... }); 

    Прежде всего … «$ colname» – это не то же самое, что «$ colname», и это должно быть просто $ colname без апострофов.

    Я не уверен, что это сработает … но вы можете попробовать.

      $table->text('$colname'); $table->text($colname); 

    Если вы поместите переменную $ в одинарные кавычки, PHP думает, что это обычный текст, поэтому строка отображается так, как она была написана. Вы должны посмотреть на этот код:

     $colname = 'something'; echo '$colname'.'<br />'; echo "$colname".'<br />'; echo "{$colname}".'<br />'; echo $colname.'<br />'; 

    Результат для этого будет:

     $colname something something something 

    Так что это явно не красноречиво.

    Ты использовал:

     $table->text('$colname'); 

    поэтому вы попытались создать текстовый файл с именем точного $colname если вы хотите использовать его как переменную, вы должны просто использовать в этом случае:

     $table->text($colname);