laravel 雄辩 hasOneThrough 外键

Posted

技术标签:

【中文标题】laravel 雄辩 hasOneThrough 外键【英文标题】:laravel eloquent hasOneThrough foreign keys 【发布时间】:2021-10-02 09:41:59 【问题描述】:

我有以下结构:

**users**
id, company_id

**companies**
id, country_id

**countries**
id, name

现在我想让用户像这样使用公司和国家:

User::with('country')->get();

所以我已将关系添加到我的用户模型中:

    public function country() 
        return $this->hasOneThrough(Country::class, Company::class);
    

但是,Eloquent 正在公司列中查找 user_id 列,而不是 users 表中的 company_id 列:

select `countries`.*, `companies`.`user_id` as `laravel_through_key` 
from `countries` 
inner join `companies` on `companies`.`id` = `countries`.`company_id`

【问题讨论】:

【参考方案1】:

如文档中的详细说明所述

return $this->hasOneThrough(
            Country::class,
            Company::class,
            'id', // Foreign key on the Companies table...
            'id', // Foreign key on the Country table...
            'company_id', // Local key on the users table...
            'country_id' // Local key on the Companies table...
        );

一个更简单的解决方案是使用现有的关系belongsTo

User::with('company.country')->get();

【讨论】:

以上是关于laravel 雄辩 hasOneThrough 外键的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 eloquent hasmanythrough 或 hasonethrough 在 laravel 中加入 3 个表

Laravel 雄辩加入 ajax

Laravel 雄辩的极限查询

为啥 laravel 雄辩的关系返回空数组

Laravel 和雄辩合集

Laravel 雄辩的一对一通过(级别/树)关系