2017-04-03 55 views
0

我想做一個函數,可以返回一個Query \ Builder,將始終返回一個空集。Laravel查詢生成器表達式返回空結果

我正在做一些幫助函數和Query \ Builder對象得到傳遞。在某些情況下,我總是希望結果Query \ Builder對象返回一個空集,而不管稍後添加什麼。

一個例子如下。我有一個函數返回查詢get_users_for_wednesdays,並將結果傳遞給另一個函數,該函數在where子句上添加。我不需要檢查是否存在filter_for_steves中的查詢,我只是想修改它並返回一個查詢。

是否有一個總是產生空集的高效查詢?理想情況下,在實際查詢數據庫之前短路。

public function get_users_for_wednesdays() 
{ 
    if (is_wednesday()) 
    { 
     return \App\User::query(); 
    } 
    else 
    { 
     // HOW TO RETURN QUERY FOR EMPTY RESULT SET HERE? 
    } 
} 

public function filter_for_steves($users) 
{ 
    return $users->where('name', 'steve'); 
} 

public getThirdWednesdayStevesAttribute() 
{ 
    $users = get_users_for_wednesday(); 

    return filter_for_steves($users)->get(); 
} 
+0

這可能是你在找什麼:http://stackoverflow.com/questions/23599584/how-to-manually-create-a-new-empty-eloquent-collection-in-laravel-4 – commanderZiltoid

+0

@commanderZiltoid,謝謝!我正在讀你最初的答案,然後它突然消失了:-)我不知道你發佈的鏈接是我想要的,因爲這似乎是在處理一個收藏?我希望Query \ Builder能夠被修改,但是當調用get()時總是返回一個空集。 –

+2

'return \ App \ User :: query() - > limit(0);'但你必須小心。 – skido

回答

3

您的前兩個功能應該是Scopes

它更有意義,把在大廈查詢的功能is_wednesday()檢查,但如果你喜歡的其他方式scopeUsersForWednesday()可以只返回$查詢,而無需修改它,當is_wednesday()返回false。

public function scopeUsersForWednesday($query) 
{ 
    // Replace with whatever your actual query should be 
    return $query; 
} 

public function scopeFilterForSteves($query) 
{ 
    return $query->where('name', 'steve'); 
} 

public function getThirdWednesdayStevesAttribute() 
{ 
    $query = User::filterForSteves(); 

    if (is_wednesday()) { 
     $query = $query->usersForWednesday(); 
    } 

    return $query->get(); 
} 
+0

我剛纔在看範圍,這看起來很有希望,我會調查更多。 –

+0

我打算將其標記爲正確的,因爲在閱讀更多內容後,它看起來像是「正確的方式」。我會重新評估是否發佈了更多答案。謝謝! –