Php 在Laravel控制器中保存125列的更有效方法
我有一个相当大的表,有125个数据输入,每个数据输入都必须保存在一个单独的列中 我已将每个HTML输入命名为1、2、3等。。。在桌子里也是一样,希望能帮上忙 目前,我有以下代码:Php 在Laravel控制器中保存125列的更有效方法,php,laravel,for-loop,laravel-4,laravel-5,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 = 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'),然后保存它们
for($i=1; $i<=125; $i++) {
$data[$i] = [
'site_id'=>Input::get('site_id'),
'result'=>Input::get($i), 'result_id'=>$i
];
}
如果你想用雄辩的语言:
Model::insert($data);
您可以在控制器中使用类似于此的模式来处理创建新观测值和编辑现有观测值的操作,而无需担心特定的属性名称:
// 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 view模板中的HTML帮助程序来构建表单,并使用form::model打开表单,它甚至会使用您传递给它的对象填充输入值
例如,在视图中:
{{ Form::model($observation) }}
为什么不尝试从1到125的for循环?我认为这可能是一个可行的答案,但我不确定如何循环并保存它们?我可以在循环时将它们保存在数组中,然后调用->save()函数吗?您希望所有内容都存储在125行中。对吗?不是列?是的,将保存为125行。您可以使用laravel的插入方法。我会发布答案。谢谢你的帮助@mmccaff。两人都给出了有帮助和有见地的答案。谢谢你的帮助@Jilson Thomas。如果你想要时间戳,别忘了也包括时间戳。
{{ Form::model($observation) }}