首页 > 解决方案 > Laravel Eloquent:如何使用 Pivot 获得第三个表关系

问题描述

我无法用 Eloquent 正确解决这个问题。

假设我有这个表:

--- Users ---
id (primary)

--- Clients ---

dni (primary)

--- Notifications ---
notification_id (primary)
client_dni (foreign key of Clients table)

--- Clients_Users --- (Pivot table)
client_dni
user_id

解释:一个用户有多个客户端,每个客户端都有通知。

我必须获得与单个用户相对应的所有通知。这意味着,所有具有用户的所有客户端的单一功能的通知。像 User::notifications 这样的东西。

问题是我无法直接访问用户的通知,因为通知与客户链接。

感谢您的帮助......两个小时,我无法解决这个问题。我尝试使用 hasManyThrough,但我认为这不适合这个问题。

标签: laraveleloquentpivot

解决方案


我找到了一个解决方案,但我认为不推荐这样做,Eloquent 必须有更好的方法......但是:

        $notificaciones = Notifications::
        join('clients', 'notifications.client_dni', '=', 'clients.dni')
        ->join('clients_users', 'clients_users.client_dni', '=', 'clients.dni')
        ->select(['clients.dni as client.dni',
            'clients.name as client.name',
            'clients.surname as client.surname',
            'clients.empresa',
            'notifications.notification_id',
            'notifications.subject',
            'notifications.isRead',
            'notifications.date',
            'clients.procedencia'])
        ->where("clients_users.user_id", "=", "".Auth::user()->id."");

    return (datatables($notificaciones)->toJson());

在我的 get Notifications 查询中,我加入了数据透视表并检查用户 ID 是否与客户端 ID 匹配......简单地使用 $user->notifications 会更好,但目前我会这样做。

我会等待以防有人有更好的解决方案!


推荐阅读