因此,我的boot()
中有一个AuthServiceProvider
,它从数据库中读取了一些Permission
:
foreach (Permission::all() as $perm) {
Gate::define($perm->name, function ($user) use ($perm) {
return $user->hasPermission($perm->name);
});
}
唯一的问题是,当我执行migrate:fresh
时,一切都会中断(有一个例外),这是因为表不存在。
如何告诉Permission
模型仅在表存在的情况下才加载数据?
答案 0 :(得分:2)
要回答所问的问题,可以使用以下方法:
if (Schema::hasTable('mytable')) {
}
顺便提一下,以这种方式从数据库注册门有点反模式。服务提供商通常还没有访问经过身份验证的用户的权限,因为它们负责准备应用程序,并在会话中间件之类的东西之前对用户进行身份验证。还有许多其他方法来构造authorization不会引起诸如此类的问题。