【问题标题】:querying relations in laravel在 laravel 中查询关系
【发布时间】:2019-01-10 23:35:23
【问题描述】:

我正在练习 laravel 并且在查询关系时很困惑我有两个表(用户和角色)

在我的用户模型中我有

use SoftDeletes;

public function role(){
    return $this->hasOne(Role::class);
}

在我的榜样中我有

use SoftDeletes;

public function user(){
   return $this->belongsTo(User::class);
}

这是我的角色表结构

这是我的用户表结构

如何根据用户表查询角色

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    应用/模型/用户

    public function role()
        {
            return $this->belongsTo("App\Model\Role", "role_id", "role_id");
        }
    

    应用/模型/角色

    public function user()
        {
            return $this->hasOne("App\Model\Users");
        }
    

    进一步阅读:https://laravel.com/docs/5.6/eloquent-relationships#one-to-one

    【讨论】:

      【解决方案2】:

      您应该在两个模型中更新您的关系:

      用户模型

      use SoftDeletes;
      
          public function role(){
              return $this->belongsTo(Role::class,'role_id');
          }
      

      榜样

      use SoftDeletes;
      
      public function user(){
         return $this->hasOne(User::class);
      }
      

      您的查询如下:

      更新答案

      $user = User::find(1);
      dd($user->roles());
      

      【讨论】:

      • 先生在 laravel tinker 上试过,结果是这样 => Illuminate\Database\Eloquent\Relations\HasOne {#2923}
      • $rsltusers = User::find(1)->角色;当我在修补程序上尝试此操作时,错误是 Illuminate/Database/QueryException 并带有消息'SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列'roles.user_id'(SQL:select * from roles where @ 987654325@.user_id = 1 和 roles.user_id 不为空,roles.deleted_at 为空限制 1)'
      • @Beginner:你改变我给你的模型关系了吗?
      • 相同的结果先生 Illuminate\Database\Eloquent\Relations\HasOne {#2944} 这是真正的输出吗?我在修补匠上试过了
      【解决方案3】:

      您需要更改两个模型中的关系:

       use SoftDeletes;
      
      public function role(){
           return $this->hasOne(Role::class,'id','role_id');
      }
      

      在其他模型中也是如此:

      use SoftDeletes;
      
      public function user(){
        return $this->belongsTo(User::class,'role_id','id');
      }
      

      然后将其称为:

      User::find(1)->role();
      

      试试这个吧...

      【讨论】:

      • 我得到了这个 => Illuminate\Database\Eloquent\Relations\HasOne {#2942} 我在 tinker 上试了一下
      • 您是否尝试过将其存储在变量中并使用该变量?
      • 也可以使用 tutorials.kode-blog.com/laravel-5-eloquent-relationships 来更好地理解 laravel 中的关系。
      • 相同的结果先生 Illuminate\Database\Eloquent\Relations\HasOne {#2924}
      【解决方案4】:

      用户模型

      use SoftDeletes;
      
      public function role(){
          return $this->hasOne(Role::class,'role_id','id);
      }
      

      榜样

      use SoftDeletes;
      
      public function user(){
         return $this->belongsTo(User::class,'id','role_id');
      }
      

      像这样更新你的代码,它就可以工作了。

      【讨论】:

        【解决方案5】:

        如果 Laravel 识别出你的关系 User::find(1)->role 应该可以工作。

        只需在代码中的任何位置尝试dd(User::find(1)->role);

        【讨论】:

        • 我之前尝试过,但我收到错误 Illuminate/Database/QueryException 并带有消息“SQLSTATE[42S22]: Column not found: 1054 Unknown column 'roles.user_id' in 'where clause' (SQL: select * from roles where roles.user_id = 3 和 roles.user_id 不为空,roles.deleted_at 为空限制 1)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-02
        • 2021-08-30
        • 2013-10-03
        • 2017-07-19
        相关资源
        最近更新 更多