Laravel-如何将具有特定Where子句的DB :: raw添加到现有查询中

时间:2019-06-06 13:35:55

标签: laravel

我想将具有特定where子句的DB :: raw()添加到现有查询中。

我有这个查询:

    protected static $type = 
    [
        'daily' => 1,
        'weekly' => 2,
        'montly' => 3,
    ];

    $revenuedetails = DB::table("users")
        ->select("users.username", "users.email",DB::raw("DATE(users.created_at) as subscription_date"))
        ->where('users.plan', self::$type[$plan] ?? null);

但是我想添加:

DB::raw("DATE(users.created_at) as expired_date"))
where('users.plan_status', 0)

谁应该在旁边

  

DB :: raw(“ DATE(users.created_at)as subscription_date”))

因此结构现在将是

用户名|电邮| subscription_date | expired_date

我要添加

  

DB :: raw(“ DATE(users.created_at)作为过期日期”))

具有自己的特定where子句

  

where('users.plan_status',0)

到现有查询。

请注意

  

where('users.plan',self :: $ type [$ plan] ?? null)

是总体where子句。

那么最终结果应该是

  

用户名|电邮| subscription_date | expired_date

2 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,如果计划状态= 0,那么您要使用created_at日期作为到期日期吗?如果不是,那么expired_date应该为空吗?

如果是这样,您可以使用case语句来完成此操作,就像这样...

DB::raw(" CASE WHEN users.plan_status = 0 THEN DATE(users.created_at) ELSE null END AS expired_date ")

答案 1 :(得分:0)

嗨,如果我很好理解,您想在创建的别名上使用一个where位置,以便可以使用“ having()”代替如下所示的where位置:

$revenuedetails = DB::table("users")
    ->select("users.username", "users.email",DB::raw("DATE(users.created_at) as subscription_date"), DB::raw("DATE(users.created_at) as expired_date"))
    ->having("subscription_date", "operador", "Value_condition")
    ->having("expired_date", "operador", "Value_condition")
    ->where('users.plan', self::$type[$plan] ?? null);

您还可以查看以下参考资料:

Can you use an alias in the WHERE clause in mysql?

希望我能对您有所帮助

致谢