2017-09-20 1 views
1

회사와 DamageReport의 두 모델이 있습니다.Laravel 관계가있는 Eloquent 질의 모델

DamageReport는 항상 회사 company_id 키로 연결됩니다.

DamageReport의 company_id는 Company의 id와 같습니다.

매우 간단하고 맞습니까? 이제 내 목표는 DamageReport의 ID를 알고있을 때 회사에 쿼리하는 것입니다. 예를 들어

나는 a를 DamageReport 테이블의 행이 있습니다

id company_id 

6 1 

그리고 ID로 회사의 기록이다 :

id name 

1 Company 1 

그래서 내 컨트롤러에서 나는 DamageReport이 id (6)이고 id 1을 가진 회사를 조회해야합니다.

다음과 같은 관계를 설정했습니다. 이 내 모델

회사 모델 :

/** 
* The Damage Reprots that belong to the Company. 
*/ 
public function damageReports() 
{ 
    return $this->belongsToMany('App\DamageReport'); 
} 

DamageReport 모델 : 내 컨트롤러에 이제

/** 
* The company of a damagereport 
* 
*/ 
public function company() 
{ 
    return $this->belongsTo('App\Company'); 
} 

나는 이런 식으로 뭔가를 시도했지만 솔직히 단서가 없다

$company = new Company; 

$company = $company->company($damageReportId); 

dd($company); 

답변

2

귀하의 관계가 잘못되었습니다.

Company model: 

/** 
* The Damage Reprots that belong to the Company. 
*/ 
public function damageReports() 
{ 
    return $this->hasMany('App\DamageReport'); 
} 


DamageReport model: 

/** 
* The company of a damagereport 
* 
*/ 
public function company() 
{ 
    return $this->belongsTo('App\Company'); 
} 


// In your controller 
public function index() 
{ 
    $damageReportId = 1; 
    $company = Company::whereHas('damageReports', function ($q) use($damageReportId) { 
     $q->where('id', $damageReportId); 
    })->first(); 

    dd($company); 
} 

// Or 
public function index() 
{ 
    $damageReportId = 1; 
    $company = DamageReport::find($damageReportId)->company; 
    dd($company); 
} 
1

다음을 사용해야합니다.

$company = DamageReport::find($damageReportId)->company; 

설명 :

DamageReport이 당신에 대해 알고있는 것은, 그래서 find($id) 방법은 당신의 $id을 가지고있는 하나의 모델을 다시 가져올 것이다.

DamageReportCompany과의 관계가 올바르게 설정되어 있기 때문에 ->company 관계는 관련 회사 모델을 다시 가져옵니다.

+0

그래, 그거야 감사해야합니다! – Chris

0

관계가 일대 다 인 경우 belongsTohasMany 메서드를 사용하십시오.

그래서, 당신의 DamageReport 모델이 옳다하고 Company 모델

https://laravel.com/docs/5.5/eloquent-relationships#one-to-many,

당신이 컨트롤러에서 다음
/** 
* The Damage Reprots that belong to the Company. 
*/ 
public function damageReports() 
{ 
    return $this->hasMany('App\DamageReport'); 
} 

, Skrrp의 대답이 옳다 @

$company = DamageReport::find($damageReportId)->company;