2015-05-28 27 views
6

Im nhận được một mảng trong mảng dữ liệu 'xi lanh' từ POST:PHP Làm thế nào để lưu dữ liệu từ mảng để mysql sử dụng laravel 5

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

Bây giờ, các lĩnh vực bên trong các phím: serie, chủng loại, nhập học, vv không thay đổi, nhưng các thông tin bên trong những phím nào thay đổi, tôi có nghĩa là có thể có ngay cả 15 mặt hàng trong đó.

Vào cuối tôi cần phải lưu vào cơ sở dữ liệu:

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

Làm thế nào tôi có thể hoàn thành nhiệm vụ này và lưu tất cả các xi lanh?

Tôi đã thử tất cả những điều mà tôi có thể nghĩ là không có gì có vẻ hiệu quả.

/chỉnh sửa/

Đây là những gì Im làm như vậy cho đến nay:

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

} 

Nhưng nó cảm thấy xấu xí, tất cả những tiết kiệm doesnt cảm thấy đúng. Giải pháp bẩn nếu bạn hỏi tôi.

Trả lời

6

Trước tiên, bạn cần phải chuyển đổi cho bạn dữ liệu đầu vào sang định dạng khác:

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

Thứ hai, sử dụng xây dựng truy vấn thạo để làm một chèn hàng loạt:

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

Lưu ý: các created_atupdated_at xuất hiện ở đây nếu bảng của bạn có trường này. Khi làm việc với mô hình Eloquent, trường này được cập nhật tự động. Tuy nhiên, chúng tôi không sử dụng Eloquent, do đó chúng tôi phải gán giá trị cho trường này theo cách thủ công.

1

Bởi vì bạn đang có một mảng để chèn dữ liệu vào cơ sở dữ liệu, bạn có thể thử phương pháp create từ mô hình:

Cylinder::create($array); 

nhưng nó thực sự cần key của mảng là field_name trong cơ sở dữ liệu của bạn . Hoặc bạn có thể làm điều này với những người xây dựng truy vấn:

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

và một lần nữa nó là cần thiết để thiết lập key của mảng là field_name trong cơ sở dữ liệu của bạn.

+0

Tôi vừa thử điều này, chỉ 1 hàng không có thông tin trên bảng Xi lanh, tôi không nghĩ rằng nó hoạt động khi có một mảng trong một mảng. –

+0

okay có thể với mã của riêng bạn nó sẽ hoạt động nếu bạn lấy '$ cylinder = new Cylinder();' trong vòng lặp while. –

1

Tôi không biết bạn buộc phải sử dụng $_POST mảng toàn cầu để nhận dữ liệu từ người dùng.

Có lẽ, đây là những gì bạn muốn.

/** 
* 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 
    } 
} 
Các vấn đề liên quan