【发布时间】:2021-06-05 20:49:04
【问题描述】:
我正在构建一个用于管理用户/角色/权限的前端,并在后端使用 Spatie > Permissions 包。
我正在寻求实现的一个功能是选择一个权限并进行此选择,然后显示所有具有所选权限的用户。
使用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 适当处理。但是我想访问具有指定权限的 Users。
简而言之,嵌套的急切加载似乎失败了,这完全取决于代码是在 Laravel 还是 Tinker 中。
我正在使用 php v7.3.25 和 Laravel 8.22.1
感谢您的帮助。
【问题讨论】:
-
无论如何都要尝试
Permission::with('roles.users')->find(59)->dd(),你的代码中有额外的左括号。所以,dd(Permission::with('roles.users')->find(59));应该可以工作 -
感谢您的拍摄。这会导致相同的错误:“错误类名称必须是有效的对象或字符串”。我同意它应该可以工作......不确定它是否与 Spatie、Php 或更新的 Laravel 有关。删除与
with('roles')的关系是可行的——只是没有被链接。它仍然在 Tinker 中工作,只是不能来自代码。 -
这可能是您的关系方法中的某个错误,请也提供。
标签: php laravel eager-loading tinker laravel-permission