2016-09-02 4 views
0

Ich habe folgende Situation:Laravel 5.3: hasManyThrough Beziehung

location 
    id - integer 
    network_id - integer (FK) 

network 
    id - integer 
    owner_id - integer (FK) 

owner 
    id - integer 
    name - string 

Ich habe ein Eloquent Modell für meine Standortdaten. Jetzt möchte ich eine RESTful-API erstellen, mit der ich die Besitzerdaten über das Netzwerkmodell abrufen kann.

Ich habe versucht mit hasManyThrough ohne Glück. Das Modell hat die folgenden Beziehungen;

Network - Location = One to Many 
Owner - network = One to One 

So viele Standorte gehören zu einem Netzwerk, und jedes Netzwerk hat einen Besitzer. Dies ist immer der Fall.

Ich habe Folgendes versucht.

class Location extends Model 
{ 
    public function owner() { 
     return $this->hasManyThrough('App\Owner', 'App\Network, 'id', 'id); 
    } 
} 

Dann das Modell in meiner Ressource zurückgeben.

class LocationController extends Controller 
{ 
    public function index() { 
     return [ 
     'data' => Location::with('network', 'owner')->take($limit)->take($offset)->get() 
     ]; 
    } 
} 

Ich bekomme keinen Fehler, aber das Modell gibt keinen Besitzer zurück, sondern nur ein leeres Array.

Kann mir jemand helfen, eine Beziehung zwischen diesen Modellen mit Laravel's Eloquent herzustellen? Ich benutze Laravel 5.3.

+1

uns Bitte zeigen Sie, was Sie versucht haben, und welche Probleme auftraten. – Adrenaxus

Antwort

1

Nicht sicher, ob Ihre Tabellenstruktur passt der Lage sein, hasManyThrough zu verwenden

Von dem, was ich mit der Dokumentation können Sie

location 
    id - integer 
    network_id - integer 

network 
    id - integer 
    location_id - integer 

owner 
    id - integer 
    network_id - integer 
    name - string 

Dann könnten Sie

return $this->hasManyThrough(
      'App\Owner', 'App\Network', 
      'location_id', 'network_id', 'id' 
     ); 

benötigen würde Das heißt, Sie können es zur Arbeit bringen, indem Sie verschiedene Kombinationen der hasManyThrough z

return $this->hasManyThrough('App\Owner', 'App\Network, 'owner_id', 'id', 'network_id'); 
0

bindet Beziehung mit folgendem Code

class Location extends Model 
{ 
public function network() 
{ 
    return $this->hasMany('App\Network'); 
} 
} 


class Network extends Model 
{ 

public function owner() 
{ 
    return $this->hasOne('App\Owner'); 
} 
} 

es Ihr Problem gelöst ...

0

Besitzer Modell:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Owner extends Model 
{  

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

} 

Anruf Modell:

<?php 

$data=Owner::find(1)->get_data()->select('network_id','location_id')->get(); 

=> Get Netzwerk und Standorttabellendaten wählen Sie die Option verwenden

Verwandte Themen