2016-02-08 25 views
0

我有一個相當大的表,其中有125個數據輸入,每個數據輸入都必須保存在單獨的列中。在Laravel控制器中保存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個的數據輸入到迭代(輸入::獲得(「X」)和result_id = 'X')然後保存它們全部?

+0

你爲什麼不嘗試從1環路125? –

+0

我認爲這可能是一個可行的答案,但我不確定如何循環並保存它們?我可以在循環中將它們保存在數組中,然後調用 - > save()函數? – Ben

+0

您希望所有內容都以125行存儲。對?不是專欄? –

回答

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. 

,如果你想用雄辯:

Model::insert($data); 
+0

謝謝你的幫助@Jilson Thomas。 – Ben

+0

如果你想要的話,不要忘記也包括時間戳。 –

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) }} 
+0

感謝您的幫助@ mmccaff。兩者都給出了有益和有見地的答案。 – Ben

相關問題