【问题标题】:Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$status. Laravel 5.5 relationships未定义的属性:Illuminate\Database\Eloquent\Relations\BelongsTo::$status。 Laravel 5.5 关系
【发布时间】:2020-01-26 06:02:54
【问题描述】:

我们正在为学校制作一个 laravel 项目。我们有一个学校数据库,里面有教师、员工等用户。我的问题是如何防止来自特定学校的特定用户登录他们的学校状态标记为 = 0 或在学校数据库中为非活动状态?我已经从供应商那里获得了authenticated 功能,但它不起作用。我的人际关系错了吗?

状态在schools 表中,而不在users 表中,但我已经定义了关系。看看我的模型。

用户.php

public function schools()
    {
        return $this->belongsTo('App\School', 'school_id');
    }

学校.php

  public function user(){
        return $this->hasMany('App\User');
    }

登录控制器.php


  use AuthenticatesUsers;
  public function authenticated(Request $request)
    {

        $user = User::find(Auth::user()->id);
            //  dd($user->schools());
            if($user->schools()->status == 1){

                dd('active ');

            }
                dd('inactive');

【问题讨论】:

  • 为状态创建一个类似于软删除的全局范围会有所帮助吗?就 ORM 而言,任何状态为 0 的学校都不存在。

标签: php mysql laravel authentication


【解决方案1】:

在从 eloquent 关系 hasMany 而不是关系本身检索到的对象中调用属性 status

$user = User::find(Auth::user()->id);
if($user->schools->status === 1) {
     dd('active');
}

【讨论】:

  • 用三重检查严格===
  • 因为belongsTo() 应该返回 1 个对象,而不是集合
  • 今晚你在摇摆 [SO-laravel] :P
  • @Vince,试着解读你的关系“用户属于学校”、“学校有很多用户”对吗?
  • @Vince 我犯了一个错误,因为我认为这是一个 hasMany,删除 first 我更新了我的答案
猜你喜欢
  • 2018-11-22
  • 1970-01-01
  • 2020-11-23
  • 2019-08-12
  • 2020-05-04
  • 2021-09-23
  • 2020-01-29
  • 2018-11-19
  • 2020-07-08
相关资源
最近更新 更多