Laravel链接范围

时间:2016-01-27 16:01:08

标签: php laravel scope chain

我从POST表单中收到了一些变量,如下所示:

$search = $request->search;
$day = $request->day;
$month = $request->month;
$year = $request->year;
$status = $request->status;

实际上我还有更多,因此我的问题。我使用这些变量来查询我的数据库,使用范围。我现在这样做的方式:

链接范围:

$appointments = Appointment::latest('created_at')->search(search)->day($day)->month($month)->get(); // and so on..

但这只有在我使用以下范围时才有效:

public function scopeSearch($query, $date)
{
    if($search)
    {
        return $query->whereDate('start', '=', $date);
    } else {
        return false;
    }
}

因为使用上面的链接方法,如果没有搜索到任何内容,我仍然直接返回查询,显然没有找到结果。我改变了这样的范围:

public function scopeSearch($query, $value)
{
    return $query->whereDate('condition', '=', $value);
}

但是我必须在我的控制器中执行以下操作:

$appointments = Appointment::latest('created_at');

if($day) {
    $appointments = $appointments->month($day);
}

if($month) {
    $appointments = $appointments->month($month);
}

if($year) {
    $appointments = $appointments->month($year);
}

if($status) {
    $appointments = $appointments->month($status);
}

$appointments = $appointments->get();

是的,这很有效,但这很愚蠢。有没有办法做到这一点,我还没有意识到呢?我是否应该使用foreach来代替或者是否有一种更清洁的laravel方式?

0 个答案:

没有答案