Я пытаюсь создать новые таблицы 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 ()
Вы можете использовать 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
Так что это явно не связано с Eloquent.
Ты использовал:
$table->text('$colname');
поэтому вы пытались создать текстовый файл с точным именем $colname
если вы хотите использовать его как переменную, вы должны просто использовать в этом случае:
$table->text($colname);