laravel - Laravel 5.8 本地查询范围与数据透视表,返回相关模型
问题描述
我与联系人Services
具有多对多关系People
,通过services_contacts
数据透视表连接,我正在尝试在Service
模型上创建本地范围查询以返回 primaryContacts():
public function scopePrimaryContacts($query)
{
$pivot = $this->contacts()->getTable();
return $query->whereHas('contacts', function ($q) use ($pivot) {
return $q->where("{$pivot}.is_primary", true);
});
}
这将返回服务,我需要它来返回与is_primary
数据透视表本身相关的人员。我希望能够调用$this->primaryContacts
我的Service
模型,就像我可以调用$this->contacts
以获取任何/所有联系人一样。有什么想法可以从这里开始吗?以下是模型contacts
上的关系... Service
:
public function contacts()
{
return $this->belongsToMany(Person::class, 'services_contacts', 'service_uuid', 'person_uuid')
->withPivot('is_primary', 'is_active', 'contact_type_uuid')
->withTimestamps();
}
在模型services
上:Person
public function services()
{
return $this->belongsToMany(Service::class, 'services_contacts', 'person_uuid', 'service_uuid');
}
解决方案
我不会把它作为一个范围,我会做第二个关系函数,但有一些额外的参数。
服务模式
public function primaryContact()
{
return $this->belongsToMany(Person::class, 'services_contacts', 'service_uuid', 'person_uuid')
->wherePivot('is_primary', true)
->wherePivot('is_active', true);
}
推荐阅读
- ssrs-2012 - 每组每页显示一次值
- go - 下载依赖项时出错
- html - 覆盖动画的 CSS 类不起作用
- mysql - 关于“UNION ALL”语句的问题,MYSQL
- javascript - 在 JQuery 中添加变换(rotateZ)和左动画
- sql - 视图与索引视图或物化视图之间的区别
- simulation - 如何使用模拟时间来触发模块中的动作?
- java - 如何确定测试是在本地运行还是在远程服务器上运行
- php - 使用 /blogo/testing-view_5.html 清理 url,所有 php 文件都是 .html .htaccess
- c# - 如何在 ASP.NET MVC 存储库模式中使用“Sql in”