Laravel Query Builder表达式返回空结果

时间:2017-04-03 19:40:55

标签: php laravel laravel-5

我想创建一个可以返回Query \ Builder的函数,它始终返回一个空集。

我正在制作一些辅助函数,并且会传递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();
}

1 个答案:

答案 0 :(得分:3)

您的前两个功能应为Scopes

#include <iostream> using namespace std; void strassen(int (&A)[2][2], int (&B)[2][2], int (&C)[2][2]) { int s1 = B[0][1] - B[1][1]; int s2 = A[0][0] + A[0][1]; int s3 = A[1][0] + A[1][1]; int s4 = B[1][0] - B[0][0]; int s5 = A[0][0] + A[1][1]; int s6 = B[0][0] + B[1][1]; int s7 = A[0][1] - A[1][1]; int s8 = B[1][0] + B[1][1]; int s9 = A[0][0] - A[1][0]; int s10 = B[0][0] + B[0][1]; int p1 = A[0][0] * s1; int p2 = s2 * B[1][1]; int p3 = s3 * B[0][0]; int p4 = A[1][1] * s4; int p5 = s5 * s6; int p6 = s7 * s8; int p7 = s9 * s10; C[0][0] = p5 + p4 - p2 + p6; C[0][1] = p1 + p2; C[1][0] = p3 + p4; C[1][1] = p5 + p1 - p3 - p7; } int main() { int A[2][2] = {{1,3},{7,5}}; int B[2][2] = {{6,8},{4,2}}; int C[2][2]; strassen(A,B,C); cout<<C[0][0]<<endl<<C[0][1]<<endl<<C[1][0]<<endl<<C[1][1]<<endl; return 0; } 检查放在构建查询的函数中更有意义,但是如果您更喜欢另一种方式is_wednesday()只能返回$ query而不在{{1}时修改它}返回false。

scopeUsersForWednesday()