在laravel中动态创建新列

时间:2014-03-07 15:00:28

标签: mysql laravel schema

我正在尝试允许管理员从包含列标题,列类型和目标表的字段的表单在sql表中创建新列。我敢肯定我不会以最优雅的方式做到这一点,但我正在尝试使用框架而不是让每个人都打我直接查询数据库。我已经创建了几乎完全可以工作的以下控制器,但是,当我尝试使用$ new_column而不是硬编码字符串时,我得到一个未定义的变量异常。

//Capture variables from view
$type = Input::get('type');
$table_name = Input::get('table');
$proposed_name = Input::get('name');

//Convert proposed name into useable column name
$new_column = strtolower(str_replace(' ', '_', (preg_replace('/[^a-zA-Z0-9_ -%][().][\/]/s', '', $proposed_name))));


if($type == 'string') 
    {Schema::table($table_name, function($table){$table->string($new_column);});}
elseif($type == 'date') 
    {Schema::table($table_name, function($table){$table->date($new_column);});}

    ...

//Flash Success
$message = 'Variable "' . $proposed_name . '"" has been successfully created.';
Session::flash('flash_success', $message);

return Redirect::action('VariableManagerController@getIndex');

有没有办法通过Larval框架完成这项工作,还是应该对数据库进行原始查询?

对于记录,这将使用try catch块,但这只会进一步混淆上面的代码。

1 个答案:

答案 0 :(得分:0)

$alldata=Input::all();

$table_name = Input::get('table');

Schema::table($table_name, function($table) use ($alldata)
{
   $colname=$alldata['name'];
   $coltype=$alldata['type'];
   $table->$coltype($colname);});
}