2017-01-22 5 views
0

Ich versuche, Daten zu viele relationship.i von vielen abgerufen haben zwei Tabellen:Holen Sie sich von vielen zu vielen Beziehungen. Laravel

companies: [cid,name,origin] 

vehicle_types: [id, type] 

ihre Pivot-Tabelle: companies_vehicle_types: companies_id,vehicle_types_id Beziehung definiert: In Firmen:

public function vehicle_types(){ 

    return $this->belongsToMany('App\vehicle_types'); 
} 

In vehicle_types

public function companies(){ 

    return $this->belongsToMany('App\companies')->withTimestamps(); 
} 

Ich möchte Unternehmen abrufen, in denen vehicle_types = spec Typ. Wie kann ich das machen? Ich habe versucht zu tun in meinem Controller folgende:

$vehicle_types=vehicle_types::all()->whereLoose('type','Bike'); 
foreach ($vehicle_types->companies as $vehicle_types) { 
     $company[]=$vehicle_types->pivot->name; 
} 
return $company; 

Aber es scheint nicht zu funktionieren. Es löst einen Fehler von Undefined property: Illuminate\Database\Eloquent\Collection::$companies

+0

Überschreiben Sie das zweite, dritte und vierte Argument in der Relation, wenn Sie der Laravel-Konvention nicht folgen. Siehe die Dokumentation https://laravel.com/docs/5.3/eloquent-relationships#many-to-many –

+0

Ich verstehe nicht. – Anon

Antwort

1

Überschreiben Sie das zweite, dritte und vierte Argument in der Beziehung, wenn Sie Laravel Konvention nicht folgen. Lesen Sie die Dokumentation Many to Many Relation

Zweites Argument der Tabellenname der Verbindungstabelle der Beziehung bestimmt. Das dritte Argument ist der Fremdschlüssel Name des Modell, auf dem Sie die Beziehung definieren, während das vierte Argument der Fremdschlüssel Name des Modells ist, dass Sie schließen sich an:

public function vehicle_types(){ 
    return $this->belongsToMany('App\vehicle_types', 'companies_vehicle_types', 'companies_id', 'vehicle_types_id'); 
} 

Auch Ein $ vehicle_type können viele Unternehmen haben, so:

$vehicle_types=vehicle_types::all()->whereLoose('type','Bike'); 
foreach ($vehicle_types as $vehicle_type) { 
    foreach($vehicle_type->companies as $company) 
    { 
     $company[]=$company->pivot->name; 
    } 
    endforeach 
} 

Auch hier sehe ich nicht name Feld in Pivot-Tabelle für diese Linie zu arbeiten: $company[]=$company->pivot->name;

+0

Es wirft denselben Fehler auf. – Anon

+0

Ist es vielleicht, weil $ vehicle_types Sammlung anstelle von Objekt zurückgibt? – Anon

+0

@Anon oh yes.One Vehicle_type kann viele Unternehmen haben, so müssen Sie die '$ vehicle_types' zuerst und dann' $ vehicle_type-> companies' –

Verwandte Themen