Сложные красноречивые отношения - PullRequest
1 голос
/ 25 марта 2019

У меня сложные красноречивые отношения.

company
-id
-name

company_courts
-id
-company_id
-name

company_sports
-company_court_id
-sports_id

sports
-id
-name

Компания может иметь много судов. Суды могут иметь много видов спорта

Я хочу получить все виды спорта, принадлежащие суду в одной компании

Я пытался решить эту проблему с помощью hasManyThrough, но не сработало ..

return $this->hasManyThrough(Sports::class,CompanyCourts::class,"","","id","id");

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Laravel не имеет встроенной поддержки прямых отношений.

Я создал пакет для таких случаев: https://github.com/staudenmeir/eloquent-has-many-deep

class Company extends Model
{
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function sports()
    {
        return $this->hasManyDeep(
            Sports::class, [CompanyCourts::class, 'company_sports'],
            [null, 'company_court_id']
        );
    }
}
0 голосов
/ 25 марта 2019

Попробуйте запрос ниже

Sport::whereHas('companySport', function($query) use ($yourCompanyId){
   $query->has('companyCourt'. function($q) use ($yourCompanyId){
      $q->has('company', function($q2) use ($yourCompanyId){
        $q2->where('company_id', $yourCompanyId)
      })
   })
})
...