Laravel定制系列

时间:2018-01-25 23:05:25

标签: laravel laravel-eloquent laravel-collection

需要你的帮助。 我有一个视图有6个选项卡,两个主要选项卡和三个主要选项卡内部,我在每个选项卡中传递几乎相同的数据,我只更改状态和角色。

像这样:

角色1有三个选项卡:所有任务|正在进行的任务|完成任务

角色2有三个选项卡:所有任务|正在进行的任务|完成任务

现在我正在传递数组中的数据,为什么...因为我没有找到一种方法来处理集合。但是因为我无法循环通过一个"列"一个数组,这意味着我应该传递6个数组,每个选项卡一个。渲染这个页面变得越来越慢,随着时间的推移会变得更糟。

这里是其中一个阵列:

$designersAllTasks = array();
    foreach ($designersTasks as $designerTask)
    {
    $designersAllTasks[] = array(
        'id' => ($designerTask->id),
        'task_type' => (DB::table('tasktypes')->where('id','=', $designerTask->task_type_id)->value('task_type')),
        'task_code' => (DB::table('tasktypes')->where('id','=', $designerTask->task_type_id)->value('task_code')),
        'chapter_type' => (DB::table('chapters')->where('id','=', $designerTask->related_block)->value('type')),
        'chapter' => (DB::table('chapters')->where('id','=', $designerTask->related_block)->value('description')),
        'assigned_to' => (DB::table('users')->where('id','=', $designerTask->assigned_to)->value('display_name')),
        'task_time' => (DB::table('task_interactions')->where('task_id','=', $designerTask->id)->pluck('task_time')->sum()),
        'start_date' => (DB::table('task_interactions')->where('task_id','=', $designerTask->id)->where('status','=','In Progress')->pluck('created_at')->first()),
        'due_date' => ($designerTask->due_date),
        'status' => ($designerTask->status),
        'comments' => ($designerTask->comments),
   );
};

所以我试图用一个系列来做,但到现在为止我还没有找到一个正确的方法。

这是我试图收藏的方式,显然是错误的方式......

$allTasks = new Collection();
     foreach ($tasks as $task)
     {
         $allTasks = collect(
         [
         'id' => ($task->id),
         'task_type' => (DB::table('tasktypes')->where('id','=', $task->task_type_id)->value('task_type')),
         'task_code' => (DB::table('tasktypes')->where('id','=', $task->task_type_id)->value('task_code')),
         'chapter_type' => (DB::table('chapters')->where('id','=', $task->related_block)->value('type')),
         'chapter' => (DB::table('chapters')->where('id','=', $task->related_block)->value('description')),
         'assigned_to' => (DB::table('users')->where('id','=', $task->assigned_to)->value('display_name')),
         'role' => (DB::table('users')->where('id','=', $task->assigned_to)->value('role')),
         'task_time' => (DB::table('task_interactions')->where('task_id','=', $task->id)->pluck('task_time')->sum()),
         'start_date' => (DB::table('task_interactions')->where('task_id','=', $task->id)->where('status','=','In Progress')->pluck('created_at')->first()),
         'finished_in' => (DB::table('task_interactions')->where('task_id','=', $task->id)->where('status','=','Finished')->value('created_at')),
         'due_date' => ($task->due_date),
         'status' => ($task->status),
         'comments' => ($task->comments),
      ]
     );
 }; 

如果我{{ dd($allTasks) }},则返回:

Collection {#334 ▼
  #items: []
}

我怎样才能为每个循环添加一行到我的集合中。

提前致谢

1 个答案:

答案 0 :(得分:1)

虽然你的问题很难弄清楚,但也许,假设它甚至是你所要求的,会让你回到正轨。

$allTasks = new Collection();

$tasks = array(
    [
        'id' => 1, 
        'task' => 'go to the store', 
        'task_type' => 'errand', 
        'comments' => 'no fun'
    ],
    [
        'id' => 2, 
        'task' => 'drink beer', 
        'task_type' => 'not an errand', 
        'comments' => 'fun'
    ]);

foreach ($tasks as $task) {
    $allTasks->push(([
        'id' => $task['id'], 
        'task_type' => $task['task_type'], 
        'comments' => $task['comments']
        ]));
}
dd($allTasks);

Collection {#518 ▼
  #items: array:2 [▼
    0 => array:3 [▼
      "id" => 1
      "task_type" => "errand"
      "comments" => "no fun"
    ]
    1 => array:3 [▼
      "id" => 2
      "task_type" => "not an errand"
      "comments" => "fun"
    ]
  ]
}

请记住,我不知道你的数据库数据是什么,所以我在那里创建了一些测试数据,但它应该让你朝着正确的方向前进。