【发布时间】:2019-07-24 11:36:41
【问题描述】:
所以我的AuthServiceProvider 中有一个boot(),它从数据库中读取了一些Permissions:
foreach (Permission::all() as $perm) {
Gate::define($perm->name, function ($user) use ($perm) {
return $user->hasPermission($perm->name);
});
}
唯一的问题是当我执行migrate:fresh 时,一切都会中断(有一个例外),因为这些表不存在。
如何告诉Permission 模型仅在表存在时才加载数据?
【问题讨论】:
-
@dparoli 这是最好的方法吗?要包含迁移级别类?
-
在 MySQL 中,您可以尝试使用这样的查询:
select * from information_schema.tables where table_schema = 'your_database' and table_name = 'your_table'您可以为此使用数据库查询生成器,但Schema::hasTable('mytable');不依赖于数据库类型。对于您的情况,即使try .... catch -
对不起,双重评论。回答你的问题:我甚至在中间件中也使用了 Schema 类,所以你可以使用它,我对这类事情非常有用。
-
这个逻辑可能不属于您的服务提供者,因为提供者负责配置数据库驱动程序、缓存驱动程序等服务。如果您描述更多关于这段代码设置的细节对于您的应用程序,我可能会建议另一个不会导致这些错误的地方来实现它
-
@TravisBritz 它所做的是遍历我存储在数据库中的所有权限并为它们分配门,因此当它遍历权限时,它会获得一个“名称”字段并分配作为门,门内的逻辑基本上采用用户模型并检查用户是否拥有该权限