【问题标题】:Laravel Eloquent hasOne. Trying to get property of non-objectLaravel Eloquent 有一个。试图获取非对象的属性
【发布时间】:2016-06-22 05:31:21
【问题描述】:

当用户注册到网站时,我使用 Eloquent hasOne 在用户和 users_permissions 表之间创建关系,并根据他们在表单上输入的内容对用户进行分组,效果很好,但是我使用相同的方法认为它无法识别同一用户何时登录网站。

以下代码在用户注册网站时起作用

$user->permissions()->create(UserPermission::user_group($nature_of_entity));

但是当我想使用下面的方法时,我得到一个错误 尝试获取非对象的属性。

public function hasPermission($permission) {
        return (bool) $this->permissions->$permission;
    }

public function permissions() {
        return $this->hasOne('App\User\UserPermission', 'user_id');
    }

在用户数据库中有一个名为 users_permissions 的表,它有 (id, user_id, is_group_one, is_group_two, is_group_three)

我正在尝试查看用户在哪个组中,例如:

if($app->user->hasPermission('is_group_one')){
        echo 'Group One';
} 

但我得到一个错误试图获取非对象的属性。 如果有任何帮助,如果它们是我可以做到这一点并使用 Laravel Eloquent 关系方法的方法,我将非常感激。我希望你能明白我的意思。

【问题讨论】:

  • 您在权限数据库中究竟存储了什么?

标签: php mysql laravel eloquent


【解决方案1】:

创建一个通过权限关系查询并检查列(即 $permission)是否为 TRUE 的范围。斧头(bool)位...

public function scopeHasPermission($query, $permission) 
{        
    return $query->permissions->where($permission, true);
}

然后在您的控制器中,保持与您的相同:

if($app->user->hasPermission('is_group_one')) {
    ...
}

【讨论】:

  • 我仍然遇到同样的错误,尝试获取非对象的属性...
  • 公共函数 hasPermission($permission) { return $this->permissions()->where($permission, true); }
  • 它成功了,谢谢伙计。但是如何查看 hasOne 是否可以识别登录的用户 id?
  • 我的例子影响了这种关系。 $query 本质上是 $user 对象。它检查是否已经设置了关系,如果是,则查询where。保持 public function permissions() 不变。我可能误解了你的问题。但是,如果您返回 return $user->permissions->get(),您应该会看到一个结果(如果您在控制器中执行此操作,以测试该关系是否正常工作)
  • 如果它对您有用,请记住请接受您的答案 - 否则您将来会得到有限的答案。还可以提高您的声誉,这反过来会导致更多人回答您的问题。我可以看到您还有另一个问题也没有勾选为“已回答”。 :)
猜你喜欢
  • 2014-05-05
  • 1970-01-01
  • 2015-08-14
  • 2021-06-30
  • 1970-01-01
  • 2015-09-22
  • 2017-03-20
  • 2014-03-25
  • 2015-01-25
相关资源
最近更新 更多