2017-09-20 26 views
1

Ich habe 2 Modelle mit einer Beziehung Company und DamageReport.Laravel Eloquent Abfrage Modell mit Beziehung

Ein DamageReport ist immer mit einem Unternehmen durch den Schlüssel company_id verbunden.

So company_id in DamageReport entspricht id in Company.

Sehr einfach, oder? Jetzt ist es mein Ziel, das Unternehmen abzufragen, wenn ich die ID des DamageReports kenne.

Zum Beispiel

Ich habe eine Reihe der DamageReport Tabelle:

id company_id 

6 1 

Und die Aufzeichnung der Firma mit der ID ist:

id name 

1 Company 1 

Also in meinem Controller habe ich den DamageReport ID (6) und müssen Unternehmen mit ID 1 abfragen.

Ich habe eine Beziehung wie eingerichtet dies in meinen Modellen

Unternehmen Modell:

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

DamageReport Modell:

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

Jetzt in meinem Controller habe ich versucht, so etwas wie diese, aber ich habe ehrlich gesagt keine Ahnung,

$company = new Company; 

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

dd($company); 

Antwort

2

Ihre Beziehung ist falsch.

Es sollte

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

Sie sollten verwenden:

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

Erläuterung:

DamageReport ist die Sache, die Sie kennen, so dass die find($id) Methode das einzige Modell bringen, dass Sie die $id für haben.

Da DamageReport seine Beziehung zu Company korrekt eingerichtet hat, wird die ->company Beziehung das zugehörige Firmenmodell zurückbringen.

+0

Ja sein, das ist es Dank! – Chris

0

Verwenden Sie einfach belongsTo und hasMany Methode, wenn die Beziehung eins zu viele ist.

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

Also, Ihr DamageReport Modell richtig ist, und in Ihrem Company Modell,

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

Dann in Ihr Controller, @ Skrrp Antwort richtig ist,

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