2015-11-24 4 views
0

Добрый день!Как сохранить многомерный массив в Laravel

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

public function getEnviarMensajes($id,$identificador){ 
     $user = User::find($identificador); 
     $idReceptor = $user->id; 
     $idEmisor = Auth::user()->id; 

     $mesageuser = MessageUser::with('user')->with('message')->get(); 
     $name = []; 
     $content = []; 
     foreach($mesageuser as $users){ 
      foreach($users->message as $mensajes){ 
       if($users->user->id==$idEmisor){ 

       $name[] = $users->user->name; 
       echo "<p>"; 
       $content[] = $mensajes->contenido; 
       echo "<p>"; 
       echo $mensajes->created_at; 
       echo "<p>"; 

       } 
       if($users->user->id==$idReceptor){ 

       $name[] = $users->user->name; 
       echo "<p>"; 
       $content[] = $mensajes->contenido; 
       echo "<p>"; 
       echo $mensajes->created_at; 
       echo "<p>"; 
       } 
      } 

     } 

Однако, у меня есть проблема, это приводит мне нужно «присоединиться», во многих ocasions я использовал массив, но в этом случае? Как я могу сохранить разные ряды в Laravel? , также мне нужно отсортировать этот контент для строки datetime.

Может ли кто-нибудь мне помочь?

ответ

1

Я думаю, что вы можете сократить свой код на этом пути:

$mesageuser = MessageUser::with('user')->with('message')->get(); 
$messages = []; 

foreach($mesageuser as $users){ 
    foreach($users->message as $mensajes){ 
     $messages[] = [ 
      'nombre' => $users->user->name, 
      'contenido' => $mensajes->contenido, 
      'creado' => $mensajes->created_at, 
      'emisor' => ($users->user->id==$idEmisor) // true or false 
     ]; 
    } 
} 

return view('chat', ['messages' => $messages]); 

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

[ 
    [ 
     'nombre' => 'Marta', 
     'contenido' => 'Hola', 
     'creado' => '24/03/2015', 
     'emisor' => false 
    ], 
    [ 
     'nombre' => 'Salomé', 
     'contenido' => 'adiós', 
     'creado' => '24/03/2015', 
     'emisor' => true 
    ] 
] 

Если вы хотите, например, заказ по дате, а затем изменить запрос:

$mesageuser = MessageUser::with('user')->with(['message' => function($query){ 
    $query->orderBy('created_at', 'desc'); 
}])->get();