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 约定:
- class 应该以大写字母开头,所以
addresses
应该是 Addresses
(记住文件名的大小写完全相同,例如 Addresses.php`
- 模型应该是单数名词,所以应该是地址或用户而不是地址或用户(再次确保如果您决定更改它,您也更改文件名)
我正在尝试获取国家名称的数据,
我有两个模型
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
whereaddresses
.users_id
= 5 andaddresses
.users_id
is not null andaddresses
.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 约定:
- class 应该以大写字母开头,所以
addresses
应该是Addresses
(记住文件名的大小写完全相同,例如 Addresses.php` - 模型应该是单数名词,所以应该是地址或用户而不是地址或用户(再次确保如果您决定更改它,您也更改文件名)