在Laravel控制器中保存125列的更有效方法

时间:2016-02-08 21:20:30

标签: php laravel for-loop laravel-4 laravel-5

我有一个相当大的表,有125个数据输入,每个输入都必须保存在一个单独的列中。

我已经将每个HTML输入命名为1,2,3等......并且在表格中也是如此,以期有所帮助。

目前,我有以下代码:

$observation = new Observation();
$observation->site_id = Input::get('site_id');
$observation->result = Input::get('1');
$observation->result_id = '1';
$observation->save();

有没有办法可以使用循环迭代125个数据输入(Input :: get(' X')和result_id =' X')然后保存它们所有?

2 个答案:

答案 0 :(得分:0)

for($i=1; $i<=125; $i++) {

    $data[$i] = [
        'site_id'=>Input::get('site_id'),
        'result'=>Input::get($i), 'result_id'=>$i
    ];
}

使用“查询”构建器:

DB::table('table')->insert($data); // Change this with your table name. 

如果您想使用Eloquent:

Model::insert($data);

答案 1 :(得分:0)

您可以在控制器中使用类似此模式的内容来处理创建新观察和编辑现有观察而无需担心特定属性名称:

// get all non-empty inputs except 'token' 
$inputs = array_filter(Input::except('_token'), 'strlen');

// assuming 'id' is your primary key and sent as an input in your form
if (Input::has('id'))
{
    // An edit

    $id = Input::get('id');
    $observation = Observation::find($id);

    foreach ($inputs as $key => $value) 
    {
            $observation->$key = $value;
    }
}
else
{
    // A create

    $observation = new Observation($inputs);
}

此解决方案不会强制您使用顺序列名称或html输入名称(如1..125),并且如果您愿意,将允许您使用更有意义的列名称。但是,它确实假设您的列名(以及对象属性)与html输入名称相同。

相关,但您可能还想知道,如果您使用Blade视图模板中的HTML帮助程序来构建表单,并使用Form :: model打开表单,它将填充甚至填写输入的值使用传递给它的对象。

例如,在视图中:

{{ Form::model($observation) }}