Laravel雄辩地应用了hasMany关系的最新记录中的位置

问题描述 投票:0回答:1

使用Laravel 7.0

我有3个模型(MeetingMeetingVersionUser),和4个表(Meetingmeeting_versionsusersmeeting_versions_users)。

A Meeting具有许多MeetingVersion模型,其中每个版本与User具有many-to-many关系。每个MeetingVersion都有一个指向其父Meeting的外键meeting_id。通过meeting_versions_users数据透视表将用户与MeetingVersion关联。

现在,我要选择所有最新版本与给定用户ID关联的会议。

会议班

public function versions()
{
    return $this->hasMany(MeetingVersion::class, 'meeting_id');
}

MeetingVersion类

public function users()
{
    return $this->belongsToMany(User::class, 'meeting_versions_users', 'version_id', 'user_id');
}

表格

会议

+----+
| id |
+----+
| 10 |
| 11 |
+----+

meeting_versions

+----+------------+---------+
| id | meeting_id | version |
+----+------------+---------+
| 31 |         10 |       1 |
| 32 |         10 |       2 |
| 33 |         10 |       3 | <- latest version (33) for meeting id 10
| 34 |         11 |       1 |
| 35 |         11 |       2 | <- latest version (35) for meeting id 11
+----+------------+---------+

meeting_versions_users

+------------+---------+
| version_id | user_id |
+------------+---------+
|         31 |     101 |
|         32 |     101 |
|         33 |     102 | <- user associated with latest version for meeting id 10
|         34 |     101 |
|         35 |     101 | <- user associated with latest version for meeting id 11
+------------+---------+

用户

+-----+
| id  |
+-----+
| 101 |
| 102 |
+-----+

这是我正在尝试的查询。我应该只返回会议11,此查询将返回用户101的两个会议。

// Some user id.
$userId = 10;


// Query to get all meetings where user is associated with latest version of meeting.

$meeting = Meeting::query()->where(function (Builder $query) use ($userId) {

        $query->whereHas('versions', function (Builder $query) use ($userId) {

            /*
             * I want to get just the "latest" version model here, so that further queries are constrained to that model only.
             * As it is now, the below whereHas query is applied to all child models.
             * Using $query->latest('version')->limit(1) doesn't work here as expected.
             *
             * So, I need to a way to limit the following whereHas query to the latest version.
             * This constraint should be applied to just the "latest" model relation, instead of all models.
            */

            $query->whereHas('users', function (Builder $query) use ($userId) {
                $query->where('id', $userId);
            });

        });
    })->get();

任何对此表示感谢的帮助。

使用Laravel 7.0,我有3个模型(Meeting,MeetingVersion和User)和4个表(Meeting,meeting_versions,users,meeting_versions_users)。会议有许多MeetingVersion模型,其中...

laravel eloquent laravel-query-builder eloquent--relationship laravel-7.x
1个回答
0
投票

您的问题,您说:

© www.soinside.com 2019 - 2024. All rights reserved.