2016-08-09 2 views
1

Wir verfügen über eine Payments-Tabelle, die Links zu Sales- und Sales-Links zu Clients enthält. Was ist der richtige Weg, um eine Verbindung zur Kundenbeziehung aus der Payments-Tabelle herzustellen?Richtiger Weg, um eine Beziehung von einem anderen Modell zu ziehen?

Payments.sale_id -> Sales.id Sales.client_id -> Client.id

Ich habe versucht:

class Payment extends Model { 
    public function sale() { 
     return $this->belongsTo('\\App\\Models\\Sale', 'sale_id'); 
    } 

    public function client() { 
     return $this->sale->client(); 
    } 
} 

der gut arbeitet, wenn der sale_id gefüllt ist. Wenn die sale_id jedoch NULL ist, bricht dies (offensichtlich weil $ this-> sale in diesem Fall null ist).

Ich möchte eine Laravel-Lösung, die immer noch Zugriff über die $client Eigenschaft/Attribut ermöglicht.

+0

Warten Sie, Sie können einen 'Client' auch dann abrufen, wenn kein' Sale' vorhanden ist? – bishop

+0

Ich möchte nur nicht, dass es einen fatalen Fehler verursacht, wenn auf "Payment :: $ client" zugegriffen wird. Das Attribut benötigt 'client()', um ein objectsTo-Objekt trotzdem zurückzugeben. – Devon

+0

Sie können verwenden 'Hat viele durch' Beziehung ==> [Doc] (https://laravel.com/docs/5.1/eloquent-relationships#has-many-through) – Maraboc

Antwort

1

Eine vorübergehende Lösung, um die fatalen Fehler zu vermeiden, ist das get-Attribut Mutator statt client() zu verwenden:

public function getClientAttribute() { 
    if ($this->sale) { 
     return $this->sale->client; 
    } 
    return null; 
} 

Wir werden sehen, ob eine bessere Lösung kommt.

Verwandte Themen