簡體   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