2017-04-03 51 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

我打算将其标记为正确的,因为在阅读更多内容后,它看起来像是“正确的方式”。我会重新评估是否发布了更多答案。谢谢! –