我正在尝试根据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来实现这一点?
非常感谢
编辑:很抱歉,我在示例代码的前面打错了字。我的问题是,我不知道如何将我想要的变量传递给模式::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);
如果您将$variable放入单引号中,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);