簡體   English   中英

PHP如何使用laravel 5將數據從數組保存到mysql

[英]PHP How to save data from array to mysql using laravel 5

我在POST中的'Cylinders'數據數組中得到一個數組:

Array
  (
    [serie] => Array
        (
            [0] => 1234
            [1] => 3545
        )

    [seriesap] => Array
        (
            [0] => 1234234
            [1] => 345345
        )

    [type] => Array
        (
            [0] => 4546
            [1] => csdfwe
        )

    [admission] => Array
        (
            [0] => 04-05-2015
            [1] => 04-05-2015
        )

    [invoice] => Array
        (
            [0] => fei76867
            [1] => feiasodjf
        )
  )

現在,鍵內的字段:系列,類型,入場等不會改變,但這些鍵內的信息確實發生變化,我的意思是那里甚至可能有15個項目。

最后我需要保存到數據庫:

$cylinder            = new Cylinder();
$cylinder->serie     = ??;
$cylinder->seriesap  = ??;
$cylinder->type      = ??;
$cylinder->admission = ??;
$cylinder->invoice   = ??;
$cylinder->save

我怎樣才能完成這項任務並保存所有氣缸?

我已經嘗試過所有可以想到的東西似乎沒什么用。

/ 編輯 /

這就是我到目前為止所做的事情:

$cyldata = $_POST['cylinder']; //this is the post from top.

$num_elements = 0;

while($num_elements < count($cyldata['serie'])){
    $cylinder = new Cylinder();
    $cylinder->serie     = $cyldata['serie'][$num_elements];
    $cylinder->type      = $cyldata['type'][$num_elements];
    $cylinder->admission = $cyldata['admission'][$num_elements];
    $cylinder->seriesap  = $cyldata['seriesap'][$num_elements];         
    $cylinder->save
    $num_elements++;

}

但感覺很難看,所有這些豁免都不對。 如果你問我,那會很臟。

首先,您需要將輸入數據轉換為另一種格式:

$cyldata = $_POST['cylinder']; //this is the post from top.

$num_elements = 0;

$sqlData = array();

while($num_elements < count($cyldata['serie'])){
    $sqlData[] = array(
        'serie'         => $cyldata['serie'][$num_elements],
        'type'          => $cyldata['type'][$num_elements],
        'admission'     => $cyldata['admission'][$num_elements],
        'seriesap'      => $cyldata['seriesap'][$num_elements],
        'invoice'       => $cyldata['invoice'][$num_elements], // you miss this field, aren't you?
        'created_at'    => Carbon\Carbon::now(), // only if your table has this column
        'updated_at'    => Carbon\Carbon::now(), // only if your table has this column
    );
    $num_elements++;
}

其次,使用Fluent查詢構建器執行批量插入:

DB::table('table_name')->insert($sqlData);

注意:如果您的表具有這些字段,則created_atupdated_at顯示在此處。 使用Eloquent模型時,這些字段會自動更新。 但是,我們不使用Eloquent,因此我們必須手動將值分配給這些字段。

我不知道是什么迫使你使用$_POST全局數組來接收用戶的數據。

也許,這就是你想要的。

/**
 * Store the form inputs in the table
 *
 * @param Request $request
 */
public function store( Request $request ) {
    $data = Input::get();

    for($i = 0; $i < count($data['serie']); $i++) {
        $c            = new Cylinder();
        $c->serie     = $data['serie'][$i];
        $c->type      = $data['type'][$i];
        $c->admission = $data['admission'][$i];
        $c->seriesap  = $data['seriesap'][$i];

        $c->save(); // fixed typo
    }
}

因為您有一個數組要將數據插入數據庫,所以您可以嘗試使用模型中的create方法:

Cylinder::create($array);

但它實際上需要數組的key是數據庫中的field_name 或者您可以使用查詢生成器執行此操作:

DB::table('table_name')->insert($array);

並且需要將數組的key設置為數據庫中的field_name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM