Создание новой таблицы в 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 часов поиска в Google. Красноречивый синтаксис иногда смущает меня, так что, возможно, я упускаю что-то очевидное.

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

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

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

2

Решение

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

Schema::create($newtableschema['tablename'], function($table) use($newtableschema) {

// So now you can access the $newtableschema variable here
// Rest of your code...
});
5

Другие решения

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

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

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

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

$colname = 'something';

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

Выход для этого будет:

$colname
something
something
something

Так что это явно не связано с Eloquent.

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

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

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

$table->text($colname);
0
По вопросам рекламы [email protected]