2014-09-22 108 views
1

我想在Laravel框架中根據用戶輸入創建新的mysql表。基於用戶輸入在Laravel中創建新表格?

用戶提交在控制器中處理的表單,保存表單數據,然後基於用戶的輸入創建一個新表(以便稍後接收數據)。

在laravel表可以使用模式::創建()

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()

+0

什麼我你得到的錯誤是什麼?什麼是$ newtableschema ['array']'?數組是一個字段的名稱還是什麼? – 2014-09-22 17:05:36

+0

另外'$ table-> text('$ colname');'不起作用,將它改爲'$ table-> text($ colname);'。 – 2014-09-22 17:07:18

+0

我的道歉,我在解釋代碼時犯了一個錯字,我修改了原文更清晰。用戶提供了一個multidiminsional數組,但我無法弄清楚如何將它傳遞給laravel中的create table方法。 – 2014-09-22 18:04:51

回答

4

您可能使用use($newtableschema)將變量傳入closure

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

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

優秀!我不能夠感謝你,這解決了我的問題。我現在甚至要求現在都覺得很傻。 – 2014-09-22 18:21:15

1

首先...'$ colname'與「$ colname」不同,它應該只要$ colname不帶撇號。

我不確定這是否可行......但你可以嘗試我的方式。

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

如果將$變量放入單引號中,PHP認爲它是正常文本,因此字符串按照寫入的方式顯示。你應該看看這段代碼:

$colname = 'something'; 

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

輸出的,這將是:

$colname 
something 
something 
something 

因此,這顯然不是雄辯相關。

您使用:

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

所以你想創建文本文件名確切​​,如果你想使用它作爲變量,你應該在這種情況下,使用簡單:

$table->text($colname); 
+0

這就是我所說的。 – ied3vil 2014-09-22 17:37:42

相關問題