laravel - 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,但我认为这不适合这个问题。
解决方案
我找到了一个解决方案,但我认为不推荐这样做,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 会更好,但目前我会这样做。
我会等待以防有人有更好的解决方案!
推荐阅读
- php - PHP:将 fetch_assoc() 放入数组中导致空值
- javascript - React Native中组件的“源”属性中的表达式
- javascript - 获取 google sheet 信息并通过 JSON 发送到后端
- linux - Kerberos AES-256 加密在 Linux 上不起作用
- android - AMP 页面 - 汉堡图标在一些手机上呈现为“X”,特别是小米手机
- java - 在网页上显示文本文件
- javascript - 如果 innerHTML 值等于指定值,则停止提交
- python-3.x - 为什么这个 python 语句会给出这个输出?
- entity-framework-core - 从 Azure Function 调用 Azure SQL 数据库时出现暂时性错误
- cursor - Teradata 中易失性表的光标