下一个/上个月不在laravel工作

时间:2018-01-11 08:58:07

标签: php laravel date request php-carbon

所以我有这个视图,显示一个表和两个按钮(下一个/上一个)。每个按钮都有一个查询字符串/?date=next,我使用request()->has('date')在我的控制器中捕获。

<a class="button is-primary is-outlined" href="/?date=prev">Previous</a>
<a class="button is-primary is-outlined" href="/?date=next">Next</a>

用户应该能够进入下个月和之后的月份,具体取决于他点击下一个/上一个按钮的次数。

最初,我有两种方法。首先,我认为只要用户点击$count中的按钮,我就可以使用$post->whereMonth('date', $this->count)递增。其次,只需使用Carbon库$post->date->addMonth()

在这两种方法中,尽管单击下一个/上一个按钮的次数,但日期保持不变。

第一种方法:

class PostsController extends Controller
{
    protected $count; 

    public function __constructor(){
        $this->count = 0; 
    }

        public function show(Hour $post){
            if(request()->has('date') == 'next'){
                $posts = $post->whereMonth('date', $this->count);
                $this->count++; 
            } else if(request()->has('date') == 'prev'){
                $posts = $post->whereMonth('date', $this->count);
                $this->count++; 
            }

            return view('user.table', compact('posts')); 
        }
}

第二种方法(最喜欢的):

public function show(Hour $post){
    if(request()->has('date') == 'next'){
        $posts = $post->date->addMonth(); 
    } else if(request()->has('date') == 'prev'){
        $posts = $post->date->subMonth(); 
    }

    return view('user.table', compact('posts')); 
}

我已经看到Laravel提供了查询构建器increment,但这只适用于列,而不适用于变量。

有没有办法通过记住第二种方法中显示的上一个日期来完成这项工作。

1 个答案:

答案 0 :(得分:0)

看起来您只想显示日期。在这种情况下,请执行以下操作:

public function show(Hour $post)
{
    $months = request('months', 0);

    if (request('date') === 'next'){
        $posts = $post->date->addMonth();
        $months++;
    } elseif(request('date') === 'prev'){
        $posts = $post->date->subMonth();
        $months--; 
    }


    return view('user.table', compact('posts', 'months')); 
}

在视图中:

<a class="button is-primary is-outlined" href="/?date=next&months={{ $months }}">Previous</a>
<a class="button is-primary is-outlined" href="/?date=next&months={{ $months }}">Next</a>