2016-12-07 3 views
2

私はUserAppointmentの2つのモデルを持っています。ユーザーは、ユーザーでもあるクライアントを持つことができます。Laravel - 自己の多くを持っています

Appointment

id|user_id|client_id

は、私は、ユーザーごとにすべてのクライアントを引くしたいと思います(ユニーク)が、難易度を持つ:

予定表は次のようになります。これらのクライアントは、client_id下の予定で参照されています関係を作成する(hasManyThrough - ユーザーはアポイントを介して多くのユーザー(クライアント)を持つ)。

Laravelのドキュメントの私の理解に基づいて、次は動作するはずです:

User.php 

public function clients() 
{ 
    return $this->hasManyThrough('App\User', 'App\Appointment', 'client_id', 'user_id', 'id'); 
} 

-

Appointment.php 

public function user() 
{ 
    return $this->belongsTo('App\User'); 
} 

public function client() 
{ 
    return $this->belongsTo('App\User', 'client_id'); 
} 

それは私が探しているものを私を得ることはありません悲しいかな。自分のクエリを作成する必要がありますか?

答えて

1

これは少し難解です。ドキュメンテーションHas Many Throughの例はカスケードのような構造です。このタイプの関係はあなたのケースには当てはまりません(ただし、文書化されていないものが多数あるため、可能かもしれません)。

あなたが文書化されていない場合に対処する必要はありません場合、私は次のような関係を提案する:

User.php

public function appointmentsInWhichIsProvider() 
{ 
    return $this->hasMany('App\Appointment'); 
} 

public function appointmentsInWhichIsClient() 
{ 
    return $this->hasMany('App\Appointment', 'client_id'); 
} 

Appointment.php

public function user() 
{ 
    return $this->belongsTo('App\User'); 
} 

public function client() 
{ 
    return $this->belongsTo('App\User', 'client_id'); 
} 

の場合あなたは、ユーザーのすべてのクライアントを取得したい、あなたはこのような何かをすることができますtを行う必要があります):

$user = User::find(1); 
$userClients = []; 
foreach ($user->appointmentsInWhichIsProvider as $appointment) { 
    array_push($userClients, $appointment->client); 
} 
var_dump($userClients) // Collection containing all the user clients. 
関連する問題