在 Laravel 8 Blade 中使用多维数组
Using Multidimensional array in Laravel 8 Blade
我正在尝试获取一些进程和任务的状态计数,就像待办事项列表任务计数一样。
我当前的数据库看起来像这样 SQL Database Structure
+----+---------+------------+-------------+---------+------------+---------------------+---------------------+
| id | user_id | list_id | name | records | status | created_at | updated_at |
+----+---------+------------+-------------+---------+------------+---------------------+---------------------+
| 1 | 1 | 8Kwvf8ikcV | 10 mails | 19 | On-Hold | 2021-03-11 07:56:17 | 2021-03-11 07:56:17 |
| 2 | 1 | a0pJRv4Zfc | temp_emails | 884 | On-Hold | 2021-03-11 08:02:13 | 2021-03-11 08:02:13 |
| 3 | 1 | xrgZZkrLFA | 10 mails | 19 | Processing | 2021-03-11 08:06:37 | 2021-03-11 08:06:37 |
| 4 | 1 | lDOX8p2sgU | 10 mails | 19 | Completed | 2021-03-11 08:53:51 | 2021-03-11 08:53:51 |
+----+---------+------------+-------------+---------+------------+---------------------+---------------------+
我正在使用
return $listStats = ListName::select([
DB::raw("status"),
DB::raw("COUNT(status) as count")
])->where('user_id', Auth::id())
->groupBy('status')
->get();
查询以获取数据库及其计数。
当前 laravel 输出显示为
[{"status":"Completed","count":1},{"status":"On-Hold","count":2},{"status":"Processing","count":1}]
我的问题是如何在不使用 foreach 循环的情况下获取完成状态的计数?
我需要更改我的查询吗?或者我可以简单地使用 $listStats['Completed']['count']
?
除非您在查询中使用联接来发出命令并强制生成具有所有可能状态的结果,否则 foreach 在某些时候将是 运行。
一个简单的解决方案是
$StatCount[ //make sure to list all possible statuses here
"Completed" => 0,
"Processing" => 0,
"On-Hold" => 0,
];
foreach ($listStats as $listStat) {
$StatCount[$listStat->status] = $listStat->count
}
现在您可以像这样访问您的状态计数$statCount['Completed']
计数是一项非常轻量级的工作,可以轻松即时完成。与其创建额外的查询来计算记录,不如收集记录并在 Blade 中计算它们。这是一个更好的主意,因为您无论如何都会获取任务,而无需查询它们两次。
// In controller
$user = User::where('id', Auth::id())->with(['tasks' => function($query) {
$query->groupBy('status')
}])->get();
return view('viewName')->with(['user', $user]);
// In Blade
$user->tasks->Completed->count();
我正在尝试获取一些进程和任务的状态计数,就像待办事项列表任务计数一样。 我当前的数据库看起来像这样 SQL Database Structure
+----+---------+------------+-------------+---------+------------+---------------------+---------------------+
| id | user_id | list_id | name | records | status | created_at | updated_at |
+----+---------+------------+-------------+---------+------------+---------------------+---------------------+
| 1 | 1 | 8Kwvf8ikcV | 10 mails | 19 | On-Hold | 2021-03-11 07:56:17 | 2021-03-11 07:56:17 |
| 2 | 1 | a0pJRv4Zfc | temp_emails | 884 | On-Hold | 2021-03-11 08:02:13 | 2021-03-11 08:02:13 |
| 3 | 1 | xrgZZkrLFA | 10 mails | 19 | Processing | 2021-03-11 08:06:37 | 2021-03-11 08:06:37 |
| 4 | 1 | lDOX8p2sgU | 10 mails | 19 | Completed | 2021-03-11 08:53:51 | 2021-03-11 08:53:51 |
+----+---------+------------+-------------+---------+------------+---------------------+---------------------+
我正在使用
return $listStats = ListName::select([
DB::raw("status"),
DB::raw("COUNT(status) as count")
])->where('user_id', Auth::id())
->groupBy('status')
->get();
查询以获取数据库及其计数。
当前 laravel 输出显示为
[{"status":"Completed","count":1},{"status":"On-Hold","count":2},{"status":"Processing","count":1}]
我的问题是如何在不使用 foreach 循环的情况下获取完成状态的计数?
我需要更改我的查询吗?或者我可以简单地使用 $listStats['Completed']['count']
?
除非您在查询中使用联接来发出命令并强制生成具有所有可能状态的结果,否则 foreach 在某些时候将是 运行。
一个简单的解决方案是
$StatCount[ //make sure to list all possible statuses here
"Completed" => 0,
"Processing" => 0,
"On-Hold" => 0,
];
foreach ($listStats as $listStat) {
$StatCount[$listStat->status] = $listStat->count
}
现在您可以像这样访问您的状态计数$statCount['Completed']
计数是一项非常轻量级的工作,可以轻松即时完成。与其创建额外的查询来计算记录,不如收集记录并在 Blade 中计算它们。这是一个更好的主意,因为您无论如何都会获取任务,而无需查询它们两次。
// In controller
$user = User::where('id', Auth::id())->with(['tasks' => function($query) {
$query->groupBy('status')
}])->get();
return view('viewName')->with(['user', $user]);
// In Blade
$user->tasks->Completed->count();