Laravel 预加载 - 代码和 Tiner 之间的意外行为差异

Laravel Eager Loading - Unexpected Behavior Difference between Code and Tiner

我正在构建一个前端,用于在后端使用 Spatie > Permissions 包管理用户/角色/权限。

我正在寻求实现的一个功能是选择一个权限并进行此选择,然后显示所有拥有所选权限的用户。

使用php artisan tinker,我可以使用语句: Spatie\Permission\Model\Permission::with("roles.users")->find(59);,其中 59 表示有问题的权限->id,并返回相应的结果。

我的问题是,当我将此代码带到 php 并寻求 dd((Permission::with('roles.users')->find(59)); 时,我收到一个 错误 Class名称必须是有效对象或字符串错误。

使用 dd((Permission::with('roles')->find(59)); 删除嵌套关系由 Laravel 适当处理。但是我想访问具有指定权限的 Users

简而言之,嵌套预加载似乎失败了,完全取决于代码是在 Laravel 还是 Tinker.

我正在使用 php v7.3.25 和 Laravel 8.22.1

感谢您的帮助。

好的。问题解决了。感谢那些试图提供帮助的人 - 你坚持认为它应该“正常工作”让我更深入地研究了代码。

Spatie Permissions package 做得好,研究得好。由于我是开箱即用的,没有进一步修改,我假设关系已经正确设置,而且确实如此。

问题出在使用的默认身份验证上。 Spatie 想要使用 Auth::web 而 Laravel 想要使用 Auth::sanctum.

通过“角色”连接到用户关系时发现我的 Auth 函数不匹配,并引发了一般性错误。因此,如果其他人发现这是一个问题,请确保您的身份验证检查具有连续性,这样您就可以开始了。请注意,这不会对 Tinker 造成问题,这就是为什么最初的行为如此令人困惑。