laravel - 我如何从关系中获得完整的查询
问题描述
我有一个有关系的模型公司
public function contact()
{
return $this->belongsToMany(\App\Models\Contact::class, 'company_contacts', 'company_id', 'contact_id')
->wherePivot('primary', '=', true)->withPivot('primary');
}
我需要使用contact.last_name 列对项目进行排序。
所以我建立查询
$scope = $scope->leftJoin('company_contacts', "companies.id", '=', "company_contacts.company_id")
->leftJoin('contacts', "company_contacts.contact_id", '=', "contacts.id")
->groupBy(['companies.id', 'contacts.id'])
->select(['companies.*', 'contacts.last_name'])
->order('contacts.last_name');
但这应该更普遍
我可以从 $relation 获得的名称和表格的值
$relation = $scope->getRelation('contact');
$key = $relation->getQualifiedOwnerKeyName(); // etc
然后将值替换到范围生成器中。但我无法得到这部分::
->wherePivot('primary', '=', true)->withPivot('primary')
解决方案
我找到了 BelongsToMany 类的公共属性 pivotWheres,我可以使用它。
$relation->pivotWheres
推荐阅读
- python - PyCharm:函数参数的正则表达式字符串意图
- solidity - Solidity 错误:预期标识符,得到“LParen”
- google-chrome-extension - Chrome 扩展的可变价格许可证
- elasticsearch - 使用术语聚合执行搜索时如何返回实际值(不是小写)?
- javascript - 使用类和无状态组件传递所有道具
- amazon-web-services - 如何向亚马逊 SES 添加/验证动态域和电子邮件地址?
- python - 用正则表达式删除最外面的花括号
- xamarin - 使用平台特定选项配置平台页面
- android - 负边距顶部无法在 Android 上按预期工作,但在 iOS 上工作正常
- node.js - Nodejs从所选字段请求名称以外的另一个属性