我想知道,是否有办法为每个选择声明不同的where子句。
以下是我想要做的:我的数据库如下所示:
列#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();`
但是我想知道我是否只用一个查询就可以做到这一点?
编辑:我试图获得的输出应该看起来像这样:
答案 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;
}
}