laravel - 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:select * from
addresses
whereaddresses
.users_id
= 5 andaddresses
.users_id
is not null andaddresses
.id
= 2 limit 1)(查看:/Applications/ XAMPP/xamppfiles/htdocs/demo/resources/views/profiles.blade.php)
请解决我的问题。
解决方案
首先,错误非常清楚地说明了问题所在 - 您的表中没有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 约定:
- 类应该以大写字母开头,所以
addresses
应该是相当的Addresses
(记住文件名的大小写完全相同,例如 Addresses.php` - 模型应该是单数名词,因此应该是地址或用户而不是地址或用户(再次确保在您决定更改它的情况下也更改文件名)
推荐阅读
- salesforce - SalesForce Rest API 调用每小时限制
- regex - 需要正则表达式来匹配电子邮件至:
- c++ - STL图合成
- php - 编辑个人资料不会编辑 laravel
- c - Ubuntu C 如何使用 SIGTSTP 停止子进程,然后使用 SIGCONT 恢复它?
- php - 无法在 docker 容器中安装作曲家包
- php - 获取简码中的当前用户 ID 返回永远 0
- php - Codegniter - 访问数据库时出现内部错误
- python - 从图像opencv python中的像素中减去不同的值
- javascript - Parse Server - 如何从 app.js 或 index.js 调用 Cloud 代码中定义的作业