未定义的属性:Illuminate\Database\Eloquent\Relations\BelongsTo::$status。 Laravel 5.5 关系

Posted

技术标签:

【中文标题】未定义的属性:Illuminate\\Database\\Eloquent\\Relations\\BelongsTo::$status。 Laravel 5.5 关系【英文标题】: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 的学校都不存在。 【参考方案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 我更新了我的答案

以上是关于未定义的属性:Illuminate\Database\Eloquent\Relations\BelongsTo::$status。 Laravel 5.5 关系的主要内容,如果未能解决你的问题,请参考以下文章

无法读取未定义类型错误的属性“推送”:无法读取未定义错误的属性“推送”

带有 Ionic 4 的 SQLite?无法读取未定义类型错误的属性“then”:无法读取未定义的属性“then”

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

为啥 Firebug 不为未定义的属性显示“未捕获的类型错误”?

未捕获的类型错误:无法读取未定义的属性“区域”?

js运行错误 无法获取未定义或 null 引用的属性“pagecount”