【问题标题】:Merge two mysql rows into one using laravel使用laravel将两个mysql行合并为一个
【发布时间】:2019-01-11 23:05:58
【问题描述】:

我有一个名为 messages 的表,其结构如下:

id | sender_id | receiver_id | message | sent_at

我创建了一个系统,每当用户选择特定用户时,他发送或接收的消息都会以适当的方式显示在页面中。为此,我有以下代码来做这件事:

<script type="text/javascript">
function showMessages(elem){
    let id = $(elem).attr('id');
    let myId = "<?php echo \Session::get('user_id'); ?>";
    console.log(id, myId);
    $.get("/get-messages",
{
    id_no_1: id,
    id_no_2: myId
}, function(data){
    alert(data)
});
}

在这里,我获取关联用户和我自己的用户的 user_id 并对路由执行 AJAX 请求,路由有:

Route::get('/get-messages', 'PagesController@getMessages');

而我的主要功能是这样的:

public function getMessages(){
    $id_no_1 = request('id_no_1');
    $id_no_2 = request('id_no_2');
    $messagesSendByOneToTwo = DB::table('messages')
            ->where('sender_id', $id_no_1)
            ->where('receiver_id', $id_no_2)
            ->get();
    // $messagesSendByOneToTwo = json_encode($messagesSendByOneToTwo);

    $messagesSendByTwoToOne = DB::table('messages')
            ->where('sender_id', $id_no_2)
            ->where('receiver_id', $id_no_1)
            ->get();
    // $messagesSendByOneToTwo = json_encode($messagesSendByTwoToOne);

    $allMessages = array_merge($messagesSendByOneToTwo, $messagesSendByTwoToOne);

    $allMessages = json_encode($allMessages);

    echo $allMessages;


}

我有两个变量,我想将这两个变量合并为一个变量。我尝试了array_merge();,我知道它不会起作用,因为变量不是数组。对于这个问题,我有以下可能的解决方案:

  • 将两个变量合并为一个变量并使用它执行操作。 (但是,我不知道该怎么做。
  • 将两个变量作为响应发送到处理响应的 JavaScript 函数(我从未听说过)。
  • 返回到带有变量的新视图(这似乎不是一个好主意) 那么,我应该怎么做才能解决这个问题呢? 最好的方法是将变量合并到一个新变量中,我应该在这里做什么?

【问题讨论】:

    标签: php arrays ajax laravel response


    【解决方案1】:

    你没有理由一开始就做两个查询:

    public function getMessages(){
        $id_no_1 = request('id_no_1');
        $id_no_2 = request('id_no_2');
        $messagesSent = DB::table('messages')
            ->whereIn('sender_id', [ $id_no_1, $id_no_2 ])
            ->whereIn('receiver_id', [ $id_no_1, $id_no_2 ])
            ->get();
    
    
        return response()->json($messagesSent); //This is better than echoing json   
    }
    

    【讨论】:

    • 它打印出(或发出警报)[object Object],[object Object],[object Object]。 @apokryfos 可能是什么问题?
    • 响应应该是一个对象数组。尝试执行console.log(data) 并检查控制台以查看结果的实际样子
    【解决方案2】:

    如果你想要一个数组,你可以尝试下面的代码来获取数组而不是集合。

    messagesSendByOneToTwo = DB::table('messages')
                ->where('sender_id', $id_no_1)
                ->where('receiver_id', $id_no_2)
                ->get()->toArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多