[英]Laravel QUERY does not result anything even if there is no condition
[英]Laravel use condition in query in result
我使用 laravel 作为 Rest API,我从控制器获取数据:
$user= User::where('id', $id)->first(['id', 'name', 'phone', 'work', 'address']);
结果:
{
"data": {
"id": 1,
"name": "mike shinoda",
"phone": "0584634425",
"work": null,
"address": null
}
}
现在我想得到一个秘密数据,它是国民 ID,我不想将它包含在 json 数据中,只是想检测,如果设置了,返回另一个数据。 我想要如果设置了国家 ID,
$user= User::where('id', $id)->first(['id', 'name', 'phone', 'work', 'address', 'national_id']);
结果:
{
"data": {
"id": 1,
"name": "mike shinoda",
"phone": "0584634425",
"work": null,
"address": null,
"national_id": 2115 // I don't want this
}
}
相反,如果设置了国家 ID,则返回如下数据:
{
"data": {
"id": 1,
"name": "mike shinoda",
"phone": "0584634425",
"work": null,
"address": null,
"verified": true // return this if national id is set
}
}
我试过的:
$verified = false;
$national = User::where('id', $id)
->whereNotNull('national_id')
->first();
if($national){
$verified = true;
}
$user= User::where('id', $id)->first(['id', 'name', 'phone', 'work', 'address']);
$user['verified'] = $verified;
但我认为它有点不干净,不想对简单的 JSON 数据使用两个查询,有没有办法用一个查询而不是两个查询来做到这一点?
您可以使用DB::raw
与case
如下图所示
$user= User::select('id', 'name', 'phone', 'work', 'address',
DB::raw("(CASE WHEN national_id > 0 THEN 'true' ELSE 'false' END) AS verified")
)->where('id', $id)->first();
相反,您应该使用资源进行响应。 您可以控制为模型返回的确切 json 数据。 阅读有关资源的更多信息:
https://laravel.com/docs/6.x/eloquent-resources#writing-resources
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.