【问题标题】:Laravel Eloquent all with relationshipLaravel Eloquent 所有与关系
【发布时间】:2014-02-01 06:09:14
【问题描述】:

如何从 Laravel 中的关系表中获取所有数据?

所以,我有这样的表:

*users*
id
username
password
...

*address*
id
address
user_id
...

如果我用 Address::all() 调用我的 eloquent 模型,我会得到 user_id 的响应,并且我想建立关系以获取用户名。

我尝试添加:

public function users(){
  return $this->belongsTo('Users', 'user_id');
}

并使用Address::with('users')->get() 调用,但响应为空。

【问题讨论】:

    标签: laravel relationship eloquent


    【解决方案1】:

    您的用户类是 Users 还是 User?除非您覆盖它,否则 Eloquent 处理名称的默认方式可以在文档 (source) 中找到:

    请注意,我们没有告诉 Eloquent 将哪个表用于我们的 User 模型。除非明确指定另一个名称,否则类的小写复数名称将用作表名。因此,在这种情况下,Eloquent 将假定 User 模型将记录存储在 users 表中。您可以通过在模型上定义表格属性来指定自定义表格

    所以我相信如果您将地址模型中的代码更改为:

    public function users(){
      return $this->belongsTo('User', 'user_id');
    }
    

    因为我们已将Users 更改为User,所以它会起作用

    【讨论】:

      【解决方案2】:

      你需要改变

      public function users(){
         return $this->belongsTo('Users', 'user_id');
      }
      

      public function users(){
          return $this->hasOne(Users::class, 'user_id');
      }
      

      public function users(){
          return $this->hasMany(Users::class, 'user_id');
      }
      

      【讨论】:

        【解决方案3】:

        另一种方式!

         class Users extends Model {
           //override table
           protected $table = 'users';
           protected $primaryKey = 'id';
           //Your other code here
         }
        

        并在地址模型中像这样添加

         public function users(){
           return $this->belongsTo('App\Users', 'user_id');
         }
        

        【讨论】:

          猜你喜欢
          • 2016-11-21
          • 2021-07-04
          • 2020-12-23
          • 1970-01-01
          • 1970-01-01
          • 2021-05-25
          • 2019-05-14
          • 2015-04-04
          • 1970-01-01
          相关资源
          最近更新 更多