繁体   English   中英

将日期添加到查询结果中不存在的数组-Laravel 5

[英]Add Dates To Array That Don't Exist In Query Result - Laravel 5

因此,我遇到了障碍。 我希望我能解释清楚。

我正在创建一个自定义的每周日历,以显示给定一周(星期日至星期六)的“任务”。

我有以下代码,它可以捕获指定数据范围内的所有任务(按预期方式工作)。

但是,我想在视图上显示7个面板,每个面板代表一周中的某天。 我将在视图本身的@foreach进行此操作(我尚未解决)。

问题是,如果一周只有2个任务,例如在周日和周二,我将无法在一周的剩余几天中在视图上创建空白面板,而没有任何任务。

我如何确保所有星期的日期都包含在数组中-即使没有分配任务也是如此? 或者,还有更好的方法?

在控制器中:

$weekly_tasks = Auth::user()->tasks()->withinDateRange($beginning_of_week, $end_of_week)->get();

foreach ($weekly_tasks as $task) {
    $date = new Carbon($task['date']);
    $days[$date->toFormattedDateString()][] = $task;
}

return $days;

型号范围:

public function scopeWithinDateRange($query, $start, $end)
{
    return $query->whereBetween('date', [$start->subDays(1), $end]);
}

$days数组返回以下内容:

{
"Mar 22, 2015": [
    {
        "id": 1,
        "task": "stuff",
        "date": "2015-03-22 23:06:23"
    }
],
"Mar 24, 2015": [
    {
        "id": 2,
        "task": "more stuff",
        "date": "2015-03-22 23:06:23"
    }
],
}

数组应返回如下内容:

{
"Mar 22, 2015": [
    {
        "id": 1,
        "task": "stuff",
        "date": "2015-03-22 23:06:23"
    }
],
"Mar 23, 2015": [
],
"Mar 24, 2015": [
    {
        "id": 2,
        "task": "more stuff",
        "date": "2015-03-22 23:06:23"
    }
],
"Mar 25, 2015": [
],
"Mar 26, 2015": [
],
"Mar 27, 2015": [
],
"Mar 28, 2015": [
],
}

您可以使用一周中的所有天初始化$ days数组作为指向空数组的键,然后将所有任务附加到相应的数组。

我以前从未使用过Laravel,但是一个快速的Google认为我可以在本周初获得Carbon,并添加FormattedDateString作为键。 然后使用-> tomorrow()获取第二天,然后重复冲洗直到达到本周末为止。 不过,可能有更好的方法,因此只有在遇到问题时才使用此方法。

编辑:假设($ beginning_of_week,$ end_of_week)是Carbon对象:

$days = array();
$iterator = $beginning_of_week;
while ( $iterator->lte($end_of_week)){
    $days[$iterator->toFormattedDateString()] = array();
    $iterator->addDay();
}

这将初始化您的$ days,然后在您的foreach中跟随它。

定义周数组(您应该动态定义此数组)和一个空的$ weekly_tasks_data数组。 然后遍历该数组将数据复制到新数组$ weekly_tasks_data(如果有数据存在的话)。

$week_arr = array("Mar 22, 2015", "Mar 23, 2015", "Mar 24, 2015", "Mar 25, 2015", "Mar 26, 2015", "Mar 27, 2015", "Mar 28, 2015");
$weekly_tasks_data = array();
foreach($week_arr as $k => $v) {
    if(array_key_exists($v, $weekly_tasks))
        $weekly_tasks_data[$v] = $weekly_tasks[$v];
    else
        $weekly_tasks_data[$v] = array();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM