laravel 5.7中雄辩的一对多关系

时间:2018-10-05 09:09:10

标签: laravel laravel-5 eloquent 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]:找不到列:1054未知列   “ where子句”中的“ addresses.users_id”(SQL:从addresses中选择*   其中addressesusers_id = 5和addressesusers_id不是   null和addressesid = 2个限制1)(查看:   /Applications/XAMPP/xamppfiles/htdocs/demo/resources/views/profiles.blade.php)

请解决我的问题。

1 个答案:

答案 0 :(得分:1)

首先,错误非常清楚地说明了问题所在-users_id表中没有addresses列。

您还没有显示出尝试使用这些关系的精确程度,但是我认为问题出在这里:

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

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

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

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

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

  1. 类应该以大写字母开头,因此应该代替addresses而不是Addresses(请记住,文件名应具有完全相同的大小写,例如Addresses.php`
  2. 模型应该是单数名词,因此应该不是地址或用户,而应该是地址或用户(同样,请确保在决定更改的情况下,还要更改文件名)