【问题标题】:Eloquent One to Many Relationship in laravel 5.7laravel 5.7中雄辩的一对多关系
【发布时间】:2019-03-10 18:06:09
【问题描述】:

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

我有两个模型

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:select * from addresses 其中addresses.users_id = 5 而addresses.users_id 不是 null 和 addresses.id = 2 限制 1) (查看: /Applications/XAMPP/xamppfiles/htdocs/demo/resources/views/profiles.blade.php)

请解决我的问题。

【问题讨论】:

  • 那么,你读过那个错误信息了吗?它非常清楚地告诉你问题是什么......
  • 没有从数据库中获取数据
  • 你这是什么意思?你读过错误信息吗?
  • 遵循命名约定! Laravel 尝试从关联模型的名称中猜测外键,由于您的模型是 Users 而不是 User,它试图找到 users_id 而不是正确的 user_id

标签: laravel laravel-5 eloquent laravel-5.7


【解决方案1】:

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

你还没有展示你是如何尝试使用这些关系的,但我相信问题就在这里:

 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. 模型应该是单数名词,所以应该是地址或用户而不是地址或用户(再次确保在您决定更改它的情况下也更改文件名)

【讨论】:

  • 非常感谢..它是代码工作...再次感谢:)
猜你喜欢
  • 2012-10-08
  • 2018-10-27
  • 2018-11-14
  • 2015-07-01
  • 2023-03-11
  • 2016-11-03
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多