【问题标题】:PHP How to save data from array to mysql using laravel 5PHP如何使用laravel 5将数据从数组保存到mysql
【发布时间】:2015-08-10 09:09:42
【问题描述】:

我正在从 POST 获取“气缸”数据数组中的一个数组:

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

现在,键内的字段:serie、type、admission 等不会改变,但这些键内的信息确实会改变,我的意思是那里甚至可能有 15 个项目。

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

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

我怎样才能完成这项任务并保存所有的气瓶?

我已经尝试了所有我能想到的 foreach 似乎没有任何效果。

/编辑/

这就是我目前所做的:

$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++;

}

但感觉很难看,所有这些保存都感觉不对。如果你问我,这是肮脏的解决方案。

【问题讨论】:

    标签: php mysql arrays laravel laravel-5


    【解决方案1】:

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

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

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

      【讨论】:

        【解决方案3】:

        因为你有一个数组来插入数据到数据库,你可以试试模型中的create方法:

        Cylinder::create($array);
        

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

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

        同样需要将数组的key 设置为数据库中的field_name

        【讨论】:

        • 我刚试过这个,只有 1 行没有关于 Cylinders 表的信息,我认为当数组中有一个数组时它不起作用。
        • 好吧,如果你把$cylinder = new Cylinder();从while循环中取出,也许你自己的代码会起作用。
        猜你喜欢
        • 1970-01-01
        • 2012-09-29
        • 1970-01-01
        • 2018-07-23
        • 1970-01-01
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 2010-12-31
        相关资源
        最近更新 更多