Laravel использовать условие в запросе в результате - PullRequest
1 голос
/ 16 февраля 2020

Я использую laravel в качестве API отдыха, я получаю данные от контроллера:

$user= User::where('id', $id)->first(['id', 'name', 'phone', 'work', 'address']);

Результат:

{
  "data": {
    "id": 1,
    "name": "mike shinoda",
    "phone": "0584634425",
    "work": null,
    "address": null
  }
}

Теперь я хочу получить секретные данные, это национальный идентификатор, Я не хочу включать это в json данные, просто хочу обнаружить, если оно установлено, вернуть другие данные. Я хочу, если установлен национальный идентификатор,

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

Вместо этого, если установлен национальный идентификатор, вернуть данные, как это:

{
  "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, есть ли способ сделать это с одним запросом, а не с двумя?

Ответы [ 2 ]

3 голосов
/ 16 февраля 2020

вы можете использовать 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();
0 голосов
/ 16 февраля 2020

Вместо этого вы должны использовать ресурсы для ответа. Вы можете контролировать точные json данные, которые вы возвращаете для модели. Подробнее о ресурсах:

https://laravel.com/docs/6.x/eloquent-resources#writing -ресурс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...