PHP如何使用laravel 5将数据从数组保存到mysql

时间:2015-05-28 03:30:42

标签: php mysql arrays laravel laravel-5

我在POST的'Cylinders'数据数组中得到一个数组:

";0.00;100;0.00"

现在,键内的字段:系列,类型,入场等都不会改变,但这些键内的信息会发生变化,我的意思是那里甚至可能有15个项目。

最后我需要保存到数据库:

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
        )
  )

如何完成此任务并保存所有气瓶?

我已经尝试了所有我能想到的东西似乎都没有用。

/ 修改 /

这就是我到目前为止所做的事情:

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

但感觉很丑,所有这些豁免都不对。如果你问我,那会很脏。

3 个答案:

答案 0 :(得分:6)

首先,您需要将输入数据转换为另一种格式:

$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,因此我们必须手动将值分配给这些字段。

答案 1 :(得分:2)

我不知道是什么迫使您使用$_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
    }
}

答案 2 :(得分:1)

因为您有一个数组要将数据插入数据库,所以您可以尝试模型中的create方法:

Cylinder::create($array);

但它实际上需要数组的key为数据库中的field_name。或者您可以使用查询构建器执行此操作:

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

再次需要将数组的key设置为数据库中的field_name