2014-11-28 2 views
0

내 문제에 대한 접근 방법을 찾으려 고 노력하고 있습니다.Laravel 리버스 레코드 검색

두 개의 테이블이 있습니다. 하나는 회사 용이고 다른 하나는 모든 회사에서 제공하는 서비스 용입니다. 모든 서비스에는 공급자 키를 참조하는 외래 키 'id_company'가 있습니다. 그래서 제 모델은 이와 같습니다.

TABLE COMPANIES. 

id_company  INTEGER, 
NAME    VARCHAR, 
blah, blah 

TABLE SERVICES. 
id_service  INTEGER, 
id_company  INTEGER, 
type_of_service INTEGER, 
name    VARCHAR, 
blah, blah. 

내 Eloquent 모델은 다음과 같습니다.

class company { 
    public function services() { 
     return $this->hasMany('Service', 'id_service'); 
    } 
} 

class service { 
    public function company() { 
     return $this->belongsTo('Company'); 
    } 
} 

서비스를 제공하는 모든 회사를 나열해야합니다. 나는 웅변 기준에 대해 알고 있지만 나는이 작업을 수행하는 방법을 알아낼 수 없습니다

SELECT id_company FROM companies as c 
        JOIN services as s ON s.id_company = c.id_company 
        WHERE s.type_of_service = a_number. 

같은 SQL이 보일 것입니다.

도움이 필요합니다. 감사.

답변

1

이렇게하면 1 개 이상의 서비스를 제공하는 모든 회사가 제공됩니다.

Docs Eloquent Querying Relations

$companies = Company::has('services')->get(); 
업데이트

당신의 대답은 정확 (모든 회사는 것을는 서비스 있습니다). 나는 당신의 질문을 잘못 읽었습니다. 귀하의 기준을 충족하는 서비스를 보유한 회사를 찾으려면 whereHas 방법을 사용할 수 있습니다.

$companies = Company::whereHas('services', function ($q) use ($a_number) 
{ 
    $q->where('type_of_service', $a_number); 
})->get(); 
1

나는 스스로 대답합니다.

$companies = Company::whereHas('services', function($q) { 
    $q->where('id_service', a_number); 
})->get() 

어쨌든 답장을 보내 주셔서 감사합니다.