2016-08-09 5 views
1

私たちには、顧客へのセールスおよびセールスリンクにリンクするペイメントテーブルがあります。 PaymentsテーブルからClients関係にリンクする正しい方法は何ですか?別のモデルからリレーションシップを引き出す正しい方法ですか?

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

私が試した:

sale_idが満たされたときに正常に動作します
class Payment extends Model { 
    public function sale() { 
     return $this->belongsTo('\\App\\Models\\Sale', 'sale_id'); 
    } 

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

。しかし、sale_idがNULLの場合、これは中断します(明らかに、$ this-> saleはnullのためです)。

私はまだ$clientプロパティ/属性によるアクセスを可能にするLaravelのソリューションをしたいと思います。致命的なエラーを回避するために

+0

待っていますが、 'Sale'がなくても' Client'を取得できますか? – bishop

+0

'Payment :: $ client'がアクセスされた場合、致命的なエラーを引き起こしたくありません。この属性は、 'client()'がbelongsToオブジェクトを返すことを要求します。 – Devon

+0

あなたは 'Many Many Through'関係を利用することができます。==> [Doc](https://laravel.com/docs/5.1/eloquent-relationships#has-many-through) – Maraboc

答えて

1

一時的な解決策ではなくclient()のGET属性ミューテーターを使用することです:

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

より良い解決策が起動した場合我々が表示されます。

関連する問題