如何在Laravel中保存多维数组

时间:2015-11-24 16:20:30

标签: arrays laravel multidimensional-array laravel-5

下午好!

我正在创建一个私人聊天,我得到了第一个目标,使用以下代码获取消息和用户。

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>";
                }
            }

        }

然而,我有一个问题,这个结果我需要“加入”,在很多场合,我使用了一个数组,但在这种情况下?如何在Laravel中保存不同的行? ,我还要为datetime行排序这个内容。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分: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]);

两个if语句没用,因为在它们内部代码是相同的。我使用了一个多维数组来存储具有以下结构的所有消息:

[
    [
        '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();