繁体   English   中英

Laravel 在查询结果中使用条件

[英]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::rawcase如下图所示

$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM