【问题标题】:Laravel Excel: Export variant headersLaravel Excel:导出变体标题
【发布时间】:2020-03-08 05:44:20
【问题描述】:

我在使用 Laravel Excel 时面临以下挑战,我认为它是目前最好的电子表格。

所以,让我们每一行都是一个user,并希望为他们的hobbies 生成标题:

name, hobby_1, hobby_2, hobby_3 吉姆·史密斯,篮球,划船,国际象棋,编程

问题是,如果爱好数量可能因用户而异 - 也就是说,用户 John Majer 可能只有 hobby_1 => skateboard,我如何生成上述标题。

现在我只是打印如下标题:

 public function headings(): array
    {
        return [
            ...
     ];
}

有什么建议吗?

【问题讨论】:

  • 为什么要有单独的标题?用逗号分隔一列中的单词不是更容易吗?
  • 不幸的是,这是业务需求,@MatthiasS。
  • 你的爱好目前是如何存储的?
  • 它们存储在数据透视表hobby_user 中,其中包含user_idhobby_id。有什么帮助吗?
  • 是的,我会为你写一些答案

标签: laravel laravel-5 laravel-excel


【解决方案1】:

我认为从技术角度来看,多个标头并不是一个好的要求,因为这会使以自动化方式进一步处理数据变得困难,但这可能只是我的看法。 但既然你必须这样做,我的解决方案如下。

获取一位用户的最大爱好。示例查询可能如下所示:

public function headings(): array
    {
        $headers = [
            // all headers before hobbies
        ];
        $result = DB::table('hobby_user')->selectRaw('user_id, count(hobby_id) as total')->groupBy('user_id')->orderBy('total', 'desc')->limit(1)->first();
        $totalHobbies = $result['total'];
        // save total hobbies somewhere in class or whereever so you can use it later to build the right amount of columns for each user
        for ($i = 1; $i <= $totalHobbies; $i++) {
            $headers[] = 'hobby_' . $i;
        }
        // now all headers after hobbies
        $headers[] = '';
        return $headers;
}

当您创建用户条目时,请确保您在班级或其他任何地方都有可用的爱好数量,因此您无需在每次导出用户时执行相同的查询来获取爱好的总量入口。

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 2021-09-15
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多