Laravel Eager Loading - Code 和 Tiner 之间的意外行为差异

问题描述

我正在使用 Spatie > 后端中的权限包构建用于管理用户/角色/权限的前端。

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

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

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

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

简而言之,嵌套的急切加载似乎失败了,完全取决于代码是在 Laravel 还是 Tinker 中。

我使用的是 PHP v7.3.25 和 Laravel 8.22.1

感谢您的帮助。

解决方法

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

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...