Eloquent laravel 5.7 中的一对多关系

Eloquent One to Many Relationship in laravel 5.7

我正在尝试获取国家名称的数据,

我有两个模型

1)用户模型

用户:

class Users extends Model
{


    protected $fillable = ['fname','lname','email','password','address','state','city'];


    public function address1()
    {
        return $this->hasOne('App\Addresses');
    }
}

2) 地址模型

地址:

class addresses extends Model
{
    protected $fillable = ['user_id','country'];

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

现在我得到输出 - 这是一个错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'addresses.users_id' in 'where clause' (SQL: select * from addresses where addresses.users_id = 5 and addresses.users_id is not null and addresses.id = 2 limit 1) (View: /Applications/XAMPP/xamppfiles/htdocs/demo/resources/views/profiles.blade.php)

请解决我的问题。

首先,错误非常清楚地说明了问题所在 - 您的 addresses table.

中没有 users_id

您没有说明您是如何尝试使用这些关系的,但我相信问题出在这里:

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

当您使用不遵循 Laravel 约定的模型名称时,您应该传递外键列名称,例如:

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

这里user_id只是一个例子。我不知道您 table 中定义与用户关系的真实列名称是什么。

但是我强烈建议您使用 Laravel 和 PHP 约定:

  1. class 应该以大写字母开头,所以 addresses 应该是 Addresses(记住文件名的大小写完全相同,例如 Addresses.php`
  2. 模型应该是单数名词,所以应该是地址或用户而不是地址或用户(再次确保如果您决定更改它,您也更改文件名)