Laravel中两个模型之间的遥远关系

时间:2019-08-26 11:52:13

标签: laravel eloquent

我正在尝试在具有以下模型的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

ContactCompanymany to many具有company_contact关系,表名与CompanyType具有belongsTo关系

我遇到一种情况,我想按类型计算公司的数量,而按类型的联系人也是如此。所以在类型模型中,我做了这样的事情:

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关系。

1 个答案:

答案 0 :(得分: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');