根据用户输入在Laravel中创建新表?

时间:2014-09-22 17:03:57

标签: php mysql laravel schema eloquent

我正在尝试根据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()

3 个答案:

答案 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);