我正在尝试在具有以下模型的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
Contact
至Company
与many to many
具有company_contact
关系,表名与Company
至Type
具有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');
}
但是不能正常工作,根据文档,Contact
和Company
应该具有has Many
关系才能执行此操作,但是我却具有many to many
关系。
答案 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');