我正在尝试根据Laravel框架中的用户输入创建新的mysql表。
用户提交在控制器中处理的表单,保存表单数据,然后根据用户的输入创建新表(以便稍后接收数据)。
在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来实现这个目标吗?
非常感谢
编辑:道歉,我在我的示例代码中提到了一个拼写错误。我的问题是我不知道如何将我想要的变量传递给schema :: create()
答案 0 :(得分:5)
您可以使用use($newtableschema)
将变量传递到closure
:
Schema::create($newtableschema['tablename'], function($table) use($newtableschema) {
// So now you can access the $newtableschema variable here
// Rest of your code...
});
答案 1 :(得分:1)
首先......'$ colname'与“$ colname”不同,它应该只是$ colname而没有撇号。
我不确定这是否有用......但你可以尝试一下。
$table->text('$colname'); $table->text($colname);
答案 2 :(得分:0)
如果你把$ variable放到单引号中,PHP认为它是普通文本,所以字符串会在写入时显示。你应该看看这段代码:
$colname = 'something';
echo '$colname'.'<br />';
echo "$colname".'<br />';
echo "{$colname}".'<br />';
echo $colname.'<br />';
此输出将为:
$colname
something
something
something
所以它显然不是雄辩相关的。
您使用过:
$table->text('$colname');
因此,如果您想将其用作变量,那么您尝试创建名为exact $colname
的文本文件,在这种情况下应该简单使用:
$table->text($colname);