2016-06-29 3 views
0

자,이 커피를 마시기를 바랍니다.Laravel Eloquent Relations

다음 표가 있습니다.

Workshops 
- id 
- title 
- company_id 

Locations 
- id 
- name 

Workshop_Locations 
- workshop_id 
- location_id 

Company 
- id 
- name 

People 
- id 
- company_id 
- name 
- verified 

가능한 경우 위의 표에서 결과를 작성하려고하지만 검증 된 워크샵 만 시도합니다. 그들은 워크샵 테이블에 차례로 연결된 회사 테이블에 링크되어 있으므로 사람들 테이블에 의해 확인됩니다.

워크샵은 인증 된 사람을 배정함으로써 확인됩니다.

+0

으로 검증 워크샵을 가져올 수 에스티온? 너 뭐 해봤 니? 그래서 코드 나 튜토리얼을 크라우 징하는 것이 아니라 특정 문제를 해결하는 데 도움이됩니다. –

+0

"Laravel way"에서 수행하려는 경우 묵시적인 관계에 대해 읽어야합니다. https://laravel.com/docs/5.1/eloquent-relationships @ GarethParker가 옳다. 코드가 작동하지 않고 그 이유를 모르면 몇 가지 구체적인 순간에 도움을 드릴 수 있습니다. 그러나 아무도 당신을 위해 무료로 코드를 작성할 수는 없습니다. – GONG

+0

적어도 한 사람 (사람)이 확인 된 회사에 속한 모든 워크샵이나 모든 사람들이 확인한 회사에 속한 모든 워크샵이 필요합니까? – geoandri

답변

0

내가 제대로 질문을 이해한다면 :

$verifiedWorkshops = Workshop::select('workshops.*') 
    ->join('companies', 'workshops.company_id', '=', 'companies.id') 
    ->join('people', 'people.company_id', '=', 'companies.id') 
    ->where('people.verified', '=', true) 
    ->get() 
0

사용하고이를 달성하기보다 "Laraverish"방법을 다음 것 워크샵과의 백성들을 모델 사이의 관계 "를 통해 많은있다"

class Workshops extends Model 
{ 

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

    public function locations() 
    { 
    return $this->belongsToMany('App\Location'); 
    } 

    public function people() 
    { 
    return $this->hasManyThrough('App\People', 'App\Company'); 
    } 
} 

class Company extends Model 
{ 
    public function workshops() 
    { 
    return $this->hasMany('App\People'); 
    } 
} 

class People extends Model 
{ 
    public function company() 
    { 
    return $this->belongsTo('App\Company'); 
    } 
} 

class Location extends Model 
{ 

    public function workshops() 
    { 
    return $this->belongsToMany('App\Workshop'); 
    } 
} 

그런 다음 당신은 당신의 한때 무엇 다음 쿼리

$workshops= Workshops::whereHas('people', function ($query) { 
$query->where('verified', '=', true); 
})->get();