1

我不得不使用DB::select而不是调用模型,因为我的数据结构太复杂了。

我的主要 SQL 查询是;

    /* main mysql query */
    $sql = "SELECT t1.* FROM `contracts`.`payments` as t1 LEFT JOIN `postcodes`.`" . $postcode_dataset . "` AS t2 ON t1.`VendorZIP` = t2.`postcode` WHERE "; 

    foreach ($unserialized_input as $key => $value) {
        $sql .= "t2." . $key . " IN ('".implode("', '", $unserialized_input[$key])."') OR ";
    }

    $sql = rtrim($sql, " OR ");

    $payments = DB::select($sql);

我正在尝试使用 Maatwebsite Excel 通过这样做来导出结果;

Excel::create('SME_Payments_Export-U', function($excel) use ($payments) {

        $excel->sheet('Excel sheet', function($sheet) use ($payments) {

            $sheet->setOrientation('landscape');
            $sheet->fromArray($payments);

        });

    })->export('csv');

但我得到了错误;

Cannot use object of type stdClass as array

这是我的 var_dump 的示例;

array(176) {
  [0]=>
  object(stdClass)#302 (4) {
    ["Fiscal Year"]=>
    string(5) "13/14"
    ["Contract Number"]=>
    string(0) ""
    ["Foreign Ind"]=>
    string(1) "N"
    ["Valued or Running"]=>
    string(1) "R"
  }
  [1]=>
  object(stdClass)#304 (4) {
    ["Fiscal Year"]=>
    string(5) "13/14"
    ["Contract Number"]=>
    string(0) ""
    ["Foreign Ind"]=>
    string(1) "Y"
    ["Valued or Running"]=>
    string(1) "V"
  }
  [2]=>
  object(stdClass)#305 (4) {
    ["Fiscal Year"]=>
    string(5) "13/14"
    ["Contract Number"]=>
    string(0) ""
    ["Foreign Ind"]=>
    string(1) "N"
    ["Valued or Running"]=>
    string(1) "R"
  }

我该如何转换payments

4

2 回答 2

3

根据文档,您需要在将对象数组传递给fromArray()方法之前将其转换为数组数组:

foreach ($payments as &$payment) {
    $payment = (array)$payment;
}

$sheet->fromArray($payments);
于 2015-07-29T11:13:46.743 回答
2

我遇到了同样的问题,最适合我的是:

$payments = json_decode( json_encode($payments), true);

这会将对象/数组转换为数组并使其可用。

于 2017-11-28T18:06:56.587 回答