试图修复我的 Laravel 7 Eloquent 与三个表(用户、配置文件、国家/地区)的关系
Trying to fix my Laravel 7 Eloquent relationship with three tables (Users, Profiles, Countries)
我正在尝试在我的 'users'、'profiles' 和 'countries' table.
之间建立关系
- 用户 table 有以下列:id - name - email - password
- 配置文件 table 包含以下列:id - user_id - country_id
- 国家 table 包含以下列:id - name - code
问题是目前我的代码将用户 ID 直接与国家 table 中的 ID 匹配(用户一获得国家一,用户二 - 国家二,等等)。但是我想做的是将配置文件 table 中的 country_id 与国家 table 中的国家 ID 匹配(因此用户 1 的配置文件 country_id 为5 得到国家 table) 中 id 为 5 的县。任何纠正此问题的帮助将不胜感激。
我的用户模型
class User extends Authenticatable implements MustVerifyEmail
{
use HasFactory, Notifiable, Commenter;
public function country()
{
// if I remove 'id' I get the error "Unknown column 'countries.user_id'"
return $this->hasOne(Country::class, 'id');
}
public function profile()
{
return $this->hasOne(Profile::class);
}
}
我的个人资料模型
class Profile extends Model
{
use HasFactory;
public function user()
{
return $this->belongsTo(User::class);
}
public function country() {
return $this->belongsTo(Country::class);
}
}
我的国家模式
class Country extends Model
{
use HasFactory;
public function user()
{
return $this->hasMany(Profile::class);
}
}
我的用户控制器
class UserController extends Controller
{
public function singleUserData($userId)
{
$singleUserData= User::where('id', $userId)->with('country','profile')->get();
return view('single-user-data', ['singleUserData' => $singleUserData]);
}
public function allUsersData() {
$allUsersData = User::with('profile','country')->get();
return view('all-users-data', ['allUsersData' => $allUsersData]);
}
}
你们的关系有点不对劲。
您的个人资料模型正确 - 每个个人资料属于一个国家和一个用户。
您的用户和国家/地区模型不正确。您的用户没有 'haveOne' 国家/地区,因为用户和国家/地区之间没有直接关系 - 它 通过 配置文件模型。因此,您正在寻找的是您的用户使用“hasOneThrough”关系来查找其国家/地区。
并且,反过来,每个国家/地区将有(潜在)许多用户,但不是直接 - 再次通过配置文件模型,因此您的国家/地区需要使用'hasManyThrough'查找其用户的关系。
我正在尝试在我的 'users'、'profiles' 和 'countries' table.
之间建立关系- 用户 table 有以下列:id - name - email - password
- 配置文件 table 包含以下列:id - user_id - country_id
- 国家 table 包含以下列:id - name - code
问题是目前我的代码将用户 ID 直接与国家 table 中的 ID 匹配(用户一获得国家一,用户二 - 国家二,等等)。但是我想做的是将配置文件 table 中的 country_id 与国家 table 中的国家 ID 匹配(因此用户 1 的配置文件 country_id 为5 得到国家 table) 中 id 为 5 的县。任何纠正此问题的帮助将不胜感激。
我的用户模型
class User extends Authenticatable implements MustVerifyEmail
{
use HasFactory, Notifiable, Commenter;
public function country()
{
// if I remove 'id' I get the error "Unknown column 'countries.user_id'"
return $this->hasOne(Country::class, 'id');
}
public function profile()
{
return $this->hasOne(Profile::class);
}
}
我的个人资料模型
class Profile extends Model
{
use HasFactory;
public function user()
{
return $this->belongsTo(User::class);
}
public function country() {
return $this->belongsTo(Country::class);
}
}
我的国家模式
class Country extends Model
{
use HasFactory;
public function user()
{
return $this->hasMany(Profile::class);
}
}
我的用户控制器
class UserController extends Controller
{
public function singleUserData($userId)
{
$singleUserData= User::where('id', $userId)->with('country','profile')->get();
return view('single-user-data', ['singleUserData' => $singleUserData]);
}
public function allUsersData() {
$allUsersData = User::with('profile','country')->get();
return view('all-users-data', ['allUsersData' => $allUsersData]);
}
}
你们的关系有点不对劲。
您的个人资料模型正确 - 每个个人资料属于一个国家和一个用户。
您的用户和国家/地区模型不正确。您的用户没有 'haveOne' 国家/地区,因为用户和国家/地区之间没有直接关系 - 它 通过 配置文件模型。因此,您正在寻找的是您的用户使用“hasOneThrough”关系来查找其国家/地区。
并且,反过来,每个国家/地区将有(潜在)许多用户,但不是直接 - 再次通过配置文件模型,因此您的国家/地区需要使用'hasManyThrough'查找其用户的关系。