【问题标题】:Laravel Eloquent querying pivot tablesLaravel Eloquent 查询数据透视表
【发布时间】:2015-06-24 17:00:58
【问题描述】:

使用 Laravel 5,我有一个由用户、对话和消息组成的数据库,由一个名为“conversation_user”的用户和对话之间的数据透视表连接(并由 BelongsToMany 关系形成)。架构如下:

| USERS    | CONVERSATION | MESSAGES        | CONVERSATION_USER |
| id       | id           | id              | user_id           |
| username | timestamps   | conversation_id | conversation_id   |
| password |              | user_id         |                   |
|          |              | message         |                   |

所以基本上我正在尝试使用 conversation_user 来获取与登录用户相关的所有会话 ID,然后使用这些结果来获取与该会话相关的最后一条消息。

在 SQL 术语中,这相当于:

SELECT messages.`message` FROM conversation_user INNER JOIN messages ON
conversation_user.conversation_id=messages.conversation_id 
WHERE conversation_user.user_id=1 ORDER BY messages.id DESC

但是我不知道如何用 Eloquent 实现这一点!

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案1】:

    这应该可行:

    $messages = Message::whereHas('conversation.users', function($q){
        $q->where('user_id', 1);
    })->get();
    

    【讨论】:

    • 如果我将另一个名为 JOBS 的表引入到组合中,并在名为 JOB_ID 的对话表中添加一个外键,知道如何使用多个 WhereHas 吗?
    • 如果您指定关系,您可以链接另一个 whereHas 调用。喜欢Message::whereHas('conversation.users', ...)->whereHas('conversation.job', ...)->get()
    • 基于我的表结构它不起作用...我在这里发布了另一个问题stackoverflow.com/q/29711549/3250992
    猜你喜欢
    • 2018-11-11
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2018-12-08
    • 2020-08-09
    • 1970-01-01
    相关资源
    最近更新 更多