laravel - 如果列为真,则检查关系,Laravel
问题描述
我有 2 个表:角色和用户。
在用户中,我有 role_id,我想检查该角色是否有一个列“access_admin_area”为真。如果为真,我正在使用中间件。
Gate::define('admin', function ($user) {
return !empty($user->roles()->where('access_admin_area', true)->first());
});
来自用户模型:
public function roles()
{
return $this->hasOne(Role::class);
}
SQLSTATE [42703]:未定义列:7 错误:列角色.user_id 不存在↵LINE 1:从“角色”中选择 *,其中“角色”。“用户 ID”= $1 和“角色..
解决方案
该错误在这里很好地描述了该问题 - User 模型中的 hasOne 关系方法期望 Role 表行具有 user_id 列,该列指定引用用户表 id 列的外键。
如果我是你,我宁愿在这个用例中使用你的用户和角色模型之间的 hasMany 关系,因为我希望你的用户和角色应该有一个多对多的关系
查看 laravel 文档中的多对多关系 eloquent 和数据库结构https://laravel.com/docs/7.x/eloquent-relationships#many-to-many
推荐阅读
- python - Alexa Skills Kit 'Context' 对象没有属性 'System'
- sql - 如何在同一设置中使用 sum、replace 和 case?
- spring - @ApiOperation 中指定的标签不会覆盖@Api swagger ui 中指定的标签
- node.js - 如何在 Node Project 中从 Angular 项目中渲染索引
- c# - WindowsCryptographicException:在 Azure 中发布应用程序时拒绝访问
- system-verilog - 用于标记不正确的 verilog 事件区域的 SV 断言
- python - SWIG 构建模块的 VSCode 自动完成功能
- python - 根据我在哪个文件夹中打开 vs 代码,在 VS 代码中打开文件或导入模块时遇到问题
- android - Jetpack 的不良行为构成 HorizontalPager
- google-cloud-platform - 当规则设置为“仅预览”时,Cloud Armor 日志不是很清楚