首页 > 解决方案 > 我如何从关系中获得完整的查询

问题描述

我有一个有关系的模型公司

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')

标签: laravel

解决方案


我找到了 BelongsToMany 类的公共属性 pivotWheres,我可以使用它。

$relation->pivotWheres

推荐阅读