php - 如何使用 Laravel 和 Eloquent 查询具有多种关系的数据透视表

标签 php mysql laravel eloquent

在 Laravel 5 中,我有一个具有以下架构的数据库:

| USERS    | JOBS  | CONVERSATIONS | MESSAGES        | CONVERSATION_USER |
| id       | id    | id            | id              | user_id           |
| username | title | job_id        | conversation_id | conversation_id   |
| password |       |               | user_id         |                   |
|          |       |               | message         |                   |

其中我的conversation_user表是数据透视表。

考试问题:我正在尝试使用conversation_user数据透视表来获取与登录用户相关的所有conversation_id,然后使用这些结果来获取与该 session 相关的最后一条消息以及工作标题对话涉及到。

用 SQL 术语来说,这相当于:

SELECT t1.message, t2.title FROM

(SELECT messages.`message`, messages.conversation_id FROM conversation_user
INNER JOIN messages ON conversation_user.conversation_id=messages.conversation_id
WHERE conversation_user.user_id=$user_id ORDER BY messages.id DESC) t1

INNER JOIN

(SELECT jobs.`title`, conversations.id FROM conversations INNER JOIN jobs ON
conversations.job_id=jobs.id) t2

ON t1.conversation_id=t2.id

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

我的关系如下:

User model:
$this->hasMany('job');
$this->hasMany('message');
$this->belongsToMany('conversation');

Job model:
$this->belongsTo('user');
$this->hasMany('conversation');
$this->hasManyThrough('message', 'conversation');

Conversation model:
$this->belongsTo('job');
$this->hasMany('message');
$this->belongsToMany('user');

Message model:
$this->belongsTo('user');
$this->belongsTo('conversation');

最佳答案

如果我理解正确的话,这就是你所需要的

    $user = User::find(Auth::id());
    foreach($user->conversations()->with('messages', 'job')->get() as $conversation)
    {
        echo $conversation->job->title;
        echo $conversation->messages->sortBy('id')->last()->message;
    }

关于php - 如何使用 Laravel 和 Eloquent 查询具有多种关系的数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721798/

相关文章:

php - 插入具有一对多关系的数据

Mysql 查询在 workbench 中运行良好,但在 r 中花费的时间太长

php - Laravel 更快地查询 Controller 或 View 中的所有内容

mysql - 简单的 mySQL 子查询

php - 如何在 Laravel 5.2 中创建唯一约束?

php - 为什么我的 Laravel 项目文件夹太大?

php - 无法在 Linux 上安装 OAuth

php - 从输出的数字中减去%并显示新的数字

PHP 和 MYSQL AES_Encrypt 问题

mysql - 包含多个 'Not Like' 的 Where 语句