【问题标题】:Distant relationships between two models in LaravelLaravel 中两个模型之间的远距离关系
【发布时间】:2019-08-26 23:28:35
【问题描述】:

我正在尝试在 Laravel 上构建一个应用程序,其中我有以下模型:

type
    id - integer
    name - string

companies
    id - integer
    name - string
    type_id - integer

contacts
    id - integer
    name - string

company_contact
    contact_id - integer
    company_id - integer

ContactCompany 具有 many to many 关系,company_contact 作为表名,CompanyTypebelongsTo 关系。

我遇到一种情况,我想根据类型计算公司的数量,也与按类型的联系人相同。所以在类型模型中我做了这样的事情:

class Type extends Model {

    public function companies()
    {
        return $this->hasMany('App\Company', 'type_id', 'id');
    }

}

在控制器中我可以简单地做:

$types = Type::withCount('companies')

但如果是联系人,我尝试使用hasManyTrough 关系:

public function contacts()
{
    return $this->hasManyThrough('App\Contact', 'App\Company');
}

但没有按预期工作,根据文档,它 ContactCompany 应该具有 has Many 关系才能执行此操作,但我有 many to many 关系。

【问题讨论】:

  • 你试过这个https://laravel.com/docs/master/eloquent-relationships#many-to-many
  • @DhavalPurohit 我认为在这种情况下多对多关系不会起作用。
  • 也许你想要withPivot() 代替?此处示例:stackoverflow.com/a/24995024/3585500

标签: laravel eloquent


【解决方案1】:

Laravel 不支持直接关系。

我为这样的案例创建了一个包:https://github.com/staudenmeir/eloquent-has-many-deep

class Type extends Model
{
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function contacts()
    {
        return $this->hasManyDeep(
            Contact::class,
            [Company::class, 'company_contact']
        );
    }
}

$types = Type::withCount('contacts');

【讨论】:

    猜你喜欢
    • 2015-10-24
    • 2016-04-12
    • 2021-07-27
    • 2018-10-17
    • 2018-05-23
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多