查询具有相同id但反转它们的多个表列

Posted

技术标签:

【中文标题】查询具有相同id但反转它们的多个表列【英文标题】:Querying multiple table columns with the the same id but reversing them 【发布时间】:2020-03-22 14:06:03 【问题描述】:

我有一个 tofrom 列,它们是我的消息表中 users 的整数,因为我正在这部分构建一个类似聊天的应用程序。

所以我想获取当前登录用户的所有消息。所以这是查询

    $all_messages = Message::where('from',$logged_user)->orWhere('to',$logged_user)->with('owner')->orderBy('created_at','desc')->get();

注意$logged_user 变量是一个整数/经过身份验证的用户ID 因此,

但我还想获取logged_userrespondent_id 之间的消息,或者我也尝试连接的受访者或用户的ID。

例如,当前登录的 user_id 是 2,响应者 id 是 3 我想要 from 为 2 或 3 以及 respondent_id 为 2 和 3 的消息

【问题讨论】:

$all_messages = Message::where('from',$logged_user)->orWhere('to',$logged_user)->with('owner')->with('from') ->with('to')->orderBy('created_at','desc')->get(); 你能解释一下 2 这个代码的作用吗@JoseCarlosRamírezVásquez 【参考方案1】:

如果我对问题的理解正确,您正在寻找属于两个用户之间对话的消息,那么您正在寻找的内容应该如下:

$loggedInUserId = 2;
$contactUserId = 3;

$messages = Message::query()
    ->where(function ($query) use ($loggedInUserId, $contactUserId) 
        $query->where('sender_id', $loggedInUserId)
              ->where('recipient_id', $contactUserId);
    )
    ->orWhere(function ($query) use ($loggedInUserId, $contactUserId) 
        $query->where('recipient_id', $loggedInUserId)
              ->where('sender_id', $contactUserId);
    )
    ->with('owner')
    ->orderBy('created_at', 'desc')
    ->get();

此外,如果您非常依赖必须跟踪两个或多个用户之间的“对话”,您可能会考虑将它们聚合为线程。

【讨论】:

以上是关于查询具有相同id但反转它们的多个表列的主要内容,如果未能解决你的问题,请参考以下文章

Mysql查询连接两个表按一个表列排序

从 Ipad 拍摄的照片将在服务器上反转

AI 神经网络由于反转颜色而导致错误的手写数字预测。八度/ Matlab?

如何在 Apache Spark 中反转排列 DataFrame

如果它们都具有相同的 id,如何将来自 sql 查询的图像存储在不同的变量下?

如何在 Octave 中反转 x 和 y 轴?