【问题标题】:Pivot table different id数据透视表不同的 id
【发布时间】:2016-02-18 15:07:26
【问题描述】:

我偶然发现了一些我无法解决的棘手问题。

我有 2 个模型,用户和雇主。

          [User]
        /        
[Employer] 

Employer 继承自 User 表。雇主可以属于不同的中心,所以我在中心和医生之间存在多对多关系。

   [User] (23)
     ^
     |
  [Employer]  ____________________________   [Center]
        ^----|   employers_has_centers    |----^
             |----------------------------| 
             |id |  employer  | center_id |
             |----------------------------| 
             | 1 | 23(user_id)|     2     |
             |____________________________|

Employer.php

public function healthCenters()
{
    return $this->belongsToMany(HealthCenter::class);
}

现在我的问题是,当我尝试获取一个雇主并使用它抱怨的响应加载中心时

Unknown column 'employer_health_center.employer_id'

我从不在任何列中使用我的employer_id,我在执行 CRUD 操作时总是参考user_id

当我尝试创建雇主推荐/附加到中心时,会出现以下问题:

Column not found: 1054 Unknown column 'employer_id&#039

所以我假设默认情况下 Laravel 会尝试从我的 Employer 模型的列中获取 id,有没有一种方法可以更改,以便它应该搜索 user_id 列而不是 id?

【问题讨论】:

    标签: php laravel lumen


    【解决方案1】:

    未知列“employer_health_center.employer_id”

    这是因为默认情况下,laravel 尝试遵循约定从表 employers 中获取主键。所以 laravel 会寻找一个 id employer_id。因为,在您的表中它是employer,您可以在关系中指定它。

    public function healthCenters()
    {
        return $this->belongsToMany(HealthCenter::class, 'employer');
    }
    

    因此,如果这只是您编码的初始阶段,我强烈建议您遵循约定优于配置。

    【讨论】:

    • 好的,必须添加 (class, table, 'employer') 才能让它工作。我现在至少可以保存,但是当获取雇主和延迟加载时,中心不起作用。也许我会去PK。
    • 是的,只要遵循约定,一切都会变得超级简单。另外,跟着数据库表看,也很容易理解。
    猜你喜欢
    • 2021-10-20
    • 2023-04-10
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2018-04-10
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多