首页 > 解决方案 > 将数据透视表导出到 CSV Laravel

问题描述

我正在尝试将我的 Laravel 项目中的某些表导出到 CSV,以便备份它们并能够在项目的不同实例之间传输大量数据。

到目前为止,我有这个export功能:

private function _export($filename, $table)
{
    array_unshift($table, array_keys($table[0]));

    $handle = fopen($filename, 'w+');
    foreach ($table as $row) {
        fputcsv($handle, $row);
    }
    fclose($handle);
}

这会从表中获取文件名(例如stages.csv)和数组(例如Stage::all()->toArray())并输出文件。

我正在处理的项目有很多很多关系,每个关系都有自己的数据透视表。export将数据透视表的行放入可以传递给函数的数组的好方法是什么?

标签: phplaravelcsvpivot

解决方案


使用 laravel 的array_dot()函数,它会将你的多维数组扁平化为带有点符号的单层:

$table = array_dot($table);作为您方法的第一行。

这假设您将枢轴与$table变量一起传递。

的一个烦人的功能array_dot()是空的枢轴将保留为空数组[]而不是空字符串""(这fputcsv()不会喜欢)。因此,您需要使用 PHP 数组函数或手动进行调整,例如

foreach ($table as $rowNo => $row) {
    foreach ($row as $col => value) {
        if (is_array($value)) $table[$rowNo][$col] = "";
    }
}

推荐阅读