Я пытаюсь создать новые таблицы 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);