【问题标题】:Export Pivot table to CSV Laravel将数据透视表导出到 CSV Laravel
【发布时间】:2018-12-15 17:08:35
【问题描述】:

我正在尝试将我的 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 函数的数组的好方法是什么?

【问题讨论】:

    标签: php laravel csv pivot


    【解决方案1】:

    使用 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] = "";
        }
    }
    

    【讨论】:

    • 太好了,干杯!有没有一种简单的方法可以将枢轴 csv 导入 laravel?
    • 很高兴听到这个消息,请将答案标记为已接受。关于你的第二个问题,没有简单的方法,如果你想重新导入,单独导出表而不连接(每个表一个 csv)会更容易。
    【解决方案2】:

    【讨论】:

    • 这错过了重点问题 - 我已经有一个 CSV 转换器,我需要将数据透视表转换为数组
    • 也许我没明白你的意思。但是,我希望相关链接有用。 @JacobBarrow
    • 如果没有用...更清楚地解释问题。 @JacobBarrow
    • 这些链接不是 laravel 特定的,所以它们并不真正适用于我正在使用的框架(除非我在我的代码中编写原始 SQL,我不喜欢它)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2018-04-10
    • 2016-01-23
    • 2021-08-29
    • 2019-04-07
    相关资源
    最近更新 更多