Laravel查询:每个选择的where子句不同

时间:2014-08-06 14:37:56

标签: mysql sql laravel query-builder

我想知道,是否有办法为每个选择声明不同的where子句。

以下是我想要做的:我的数据库如下所示:database Example

列#34;可见......"指示,如果我想读出相关值。所以如果" visible_mobile"说" 0",我不想读出专栏" mobile"。

当然,我可以通过多次查询来完成这项工作,例如

`    $userDetails1 = DB::table('user')
     ->select('mobile', 'id')
     ->where('user_id',  5)
     ->where('visible_mobile',  1)
     ->get();

    $userDetails2 = DB::table('user')
    ->select('date_of_birth', 'id')
    ->where('user_id',  5)
    ->where('visible_date_of_birth',  1)
    ->get();`

但是我想知道我是否只用一个查询就可以做到这一点?

编辑:我试图获得的输出应该看起来像这样: enter image description here

1 个答案:

答案 0 :(得分:3)

使用selectRaw()和MySQL的IF函数,你可以这样做:

$userDetails = DB::table('user')
 ->selectRaw('id, user_id, IF(visible_date_of_birth = 1, date_of_birth, NULL) as dob, IF(visible_mobile = 1, mobile, NULL) as mob')
 ->where('user_id',  5)
 ->get();

由于您正在使用带有Eloquent的laravel,更好的方法是为您的模型定义移动设备和出生日期字段的访问者,如下所示:

function getMobileAttribute()
{
    if($this->visible_mobile == 1){
        return $this->mobile;
    } else {
        return NULL;
    }
}