Как бы я идентифицировал аутентифицированного пользователя в выводе JSON красноречивого запроса для системы обмена сообщениями? - PullRequest
0 голосов
/ 12 октября 2018

Я построил систему обмена сообщениями между двумя пользователями, и мне нужно иметь возможность идентифицировать аутентифицированного пользователя в красноречивом выводе JSON.

Контроллер разговора

public function show(Conversation $conversation)
 {
   $conversation->load('participants');
   $messages = $conversation->messages()->with('sender')->latest()->take(5)->get()->sortBy('created_at');

   return $messages->toArray();
}

Модель разговора

public function participants(){
   return $this->belongsToMany('App\User' ,'conversation_participants','conversation_id','user_id');
}

Выход JSON

{  
   "1":{  
      "id":59,
      "body":"Hi, what's up",
      "conversation_id":11,
      "sender_id":1,
      "type":"user_message",
      "created_at":"2018-10-01 23:43:07",
      "updated_at":"2018-10-01 23:43:07",
      "sender":{  
         "id":1,
         "username":"Jim",
         "slug":"Jim",
         "name":"Jim",
      }
   },
   "0":{  
      "id":60,
      "body":"Hi there",
      "conversation_id":11,
      "sender_id":1,
      "type":"user_message",
      "created_at":"2018-10-01 23:43:20",
      "updated_at":"2018-10-01 23:43:20",
      "sender":{  
         "id":1,
         "username":"Reggie",
         "slug":"reggie",
         "name":"Reggie",
      }
   }
}

Итак, допустим, я вошел как «Джим». Я хотел бы, чтобы в выводе JSON был какой-то идентификатор, например, свойство "logged_in":"1", в качестве идентификатора, показывающего, что Джим является вошедшим в систему пользователем, и "logged_in":"0" дляshow Reggie - это не зарегистрированный пользователь:

{  
   "1":{  
      "id":59,
      "body":"Hi, what's up",
      "conversation_id":11,
      "sender_id":1,
      "type":"user_message",
      "created_at":"2018-10-01 23:43:07",
      "updated_at":"2018-10-01 23:43:07",
      "sender":{  
         "id":1,
         "username":"Jim",
         "slug":"Jim",
         "name":"Jim",
         "logged_in":"1"
      }
   },
   "0":{  
      "id":60,
      "body":"Hi there",
      "conversation_id":11,
      "sender_id":1,
      "type":"user_message",
      "created_at":"2018-10-01 23:43:20",
      "updated_at":"2018-10-01 23:43:20",
      "sender":{  
         "id":1,
         "username":"Reggie",
         "slug":"reggie",
         "name":"Reggie",
         "logged_in":"0"
      }
   }
}

Как мне это сделать?

Примечание Идентификатор не требуется, не нужнобыть в объекте "отправитель".

1 Ответ

0 голосов
/ 12 октября 2018

Вы должны иметь возможность SELECT другой столбец следующим образом:

$messages = $conversation
    ->messages()
    ->selectRaw('messages.*, IF(messages.sender_id = ?, 1, 0) AS logged_in', [Auth::id()])
    ->with('sender')
    ->latest()
    ->take(5)
    ->get()
    ->sortBy('created_at');

Обратите внимание, я предполагаю, что вы используете MySQL.

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