试图修复我的 Laravel 7 Eloquent 与三个表(用户、配置文件、国家/地区)的关系

Trying to fix my Laravel 7 Eloquent relationship with three tables (Users, Profiles, Countries)

我正在尝试在我的 'users'、'profiles' 和 'countries' table.

之间建立关系

问题是目前我的代码将用户 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'查找其用户的关系。