亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel eloquent 合并兩個結果并排序

Laravel eloquent 合并兩個結果并排序

PHP
翻閱古今 2022-01-08 17:22:45
我發現了很多關于這個問題的帖子,但沒有解決方案。也許是因為我的 laravel 版本。它的 5.7。我有兩個結果,如下所示:result_a = DB::connection('mysql_live')->table('user_chatmessages')->where('from_user', $data->chat_from_user)->get();$result_b = DB::connection('mysql_live')->table('user_chatmessages')->where('to_user', $data->chat_from_user)->get();現在我合并它們,效果很好:$merged = $result_a->merge($result_b);$result = $merged->values()->sortByDesc('date_added');排序不會影響整個結果。問題是排序先排序result_a,然后排序result_b。我嘗試了很多不同的語法變體:$result = $result_a->merge($result_b)->sortBy('date_added');$merged = $result_a->merge($result_b);$result = $merged->sortByDesc('date_added');$merged = $result_a->merge($result_b)->sortByDesc('date_added');$result = $merged->all();$result = ($result_a->merge($result_b))->sortBy('date_added');可能更重要的是,我已經在這個問題上坐了很長時間,我發現的只是看起來超級簡單并且人們告訴它有效的線程。我也嘗試以ID相同的結果進行排序。編輯如果您想獲取某個用戶的所有接收和發送的消息,@N69S 提供的替代解決方案適用于這種情況。但是,您如何使用相同的方法在兩個特定用戶之間獲取消息?例如,我想獲取 ID 為 1 的用戶和 ID 為 2 的用戶之間的聊天消息,這將不起作用:$result = DB::connection('mysql_live')                    ->table('user_chatmessages')                    ->where('from_user', $data->chat_from_user)                    ->where('to_user', $data->chat_to_user)                    ->orWhere('from_user', $data->chat_to_user)                    ->orWhere('to_user', $data->chat_from_user)                    ->orderBy('date_added', 'desc')                    ->get();我現在正在嘗試的看起來像這樣:$result = DB::connection('mysql_live')->table('user_chatmessages')    ->where(function ($query) use ($from, $to) {        $query->where('from_user', $from)->where('to_user', $to);    })->orWhere(function ($query) {        $query->where('from_user', $to)->where('to_user', $from);    })->orderBy('date_added', 'asc')->get();但我得到一個錯誤: from & to 沒有定義。
查看完整描述

3 回答

?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

為什么不在一個查詢中恢復所有結果?


result_a = DB::connection('mysql_live')

    ->table('user_chatmessages')

    ->where('from_user', $data->chat_from_user)

    ->orWhere('to_user', $data->chat_from_user)

    ->orderBy('date_added', 'desc')

    ->get();

或用戶,->orderBy('created_at', 'desc')如果您有默認時間戳字段


編輯


要恢復兩個特定用戶之間的聊天,您需要使用括號。


result_a = DB::connection('mysql_live')

    ->table('user_chatmessages')

    ->where(function($query) use($data) {

        $query->where('from_user', $data->chat_from_user)

            ->where('to_user', $data->chat_to_user);

    })

    ->orWhere(function($query) use($data) {

        $query->where('to_user', $data->chat_from_user)

            ->where('from_user', $data->chat_to_user);

    })

    ->orderBy('date_added', 'desc')

    ->get();


查看完整回答
反對 回復 2022-01-08
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

您可以直接獲取數據,而無需像這樣使用合并:


result = DB::connection('mysql_live')

         ->table('user_chatmessages')

         ->where(function($query) use ($data){

           $query->where('from_user', $data->chat_from_user)->orWhere('to_user', $data->chat_from_user)

         })->orderBy('date_added','desc')

           ->get();


查看完整回答
反對 回復 2022-01-08
?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

如果你想使用兩個查詢,那么你可以使用聯合。


子查詢


$subQuery = DB::connection('mysql_live')

->table('user_chatmessages')

->where('from_user', $data->chat_from_user);

在主查詢上使用聯合添加子查詢


$results = DB::connection('mysql_live')

->table('user_chatmessages')

->where('to_user', $data->chat_from_user)

->union($subQuery)                         //see

->orderBy('date_added', 'desc')            //see

->get();

這應該有效。您可以使用任何查詢將它們合并以避免合并集合,然后按 date_add 排序


查看完整回答
反對 回復 2022-01-08
  • 3 回答
  • 0 關注
  • 429 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號