2017-08-13 13 views
0

私は混乱し始めています。私はuserモデルとeventモデルを持っています。ユーザーはイベントを作成できます。彼は所有者です。しかし、彼はまた、イベントに招待することができます、彼はゲストです。最初のリレーションはOneToManyリレーションであり、もう1つはManyToManyリレーションです。2つの列からデータを取得して注文する

ここでは、オーナーまたはゲストのすべてのイベントを検索したいと思います。すべてのイベントは、フィールドdateで注文してください。

この私のユーザモデルは:

class Event extends Model 
{ 
    /** 
    * Get the owner of the event. 
    */ 
    public function owner() 
    { 
     return $this->belongsTo('App\User'); 
    } 

    /** 
    * Get the guests list. 
    */ 
    public function guests() 
    { 
     return $this->belongsToMany('App\User') 
        ->using('App\Invitation') 
        ->withPivot('status') 
        ->withTimestamps(); 
    } 
} 

これは、私はそれが動作

/** 
* Return all the events (owner and guest) of a user ($id). 
*/ 
public function all($id) 
{ 
    $guested = $this->event->guests()->where('user_id', $id)->get()->load('owner', 'guests'); 
    $own = $this->event->where('owner_id', $id)->get()->load('owner', 'guests'); 

    return $guested->merge($own)->sortBy('date'); 
} 

(EventRepository内)しようとしたものです..:

class User extends Authenticatable 
{ 
    /** 
    * Get the events of the user. 
    */ 
    public function owned_events() 
    { 
     return $this->hasMany('App\Event', 'owner_id'); 
    } 

    /** 
    * Get the events list. 
    */ 
    public function events() 
    { 
     return $this->belongsToMany('App\Event') 
        ->using('App\Invitation') 
        ->withPivot('status') 
        ->withTimestamps(); 
    } 
} 

これは、イベントモデルでありますしかし、それは私のユーザーがゲストである場所ではなく、所有イベントだけを私に与えます...私はそれを行うより良い方法があると思います。 1つのリクエストに対する2回のコールはかなり悪く、2回のロードはさらに悪いですか?

私は解決策見つけたと思う
+0

イベントは、多くのゲストを持つことができるthroughtので、私を1対多の関係がそこに存在すると推測します(ゲスト関数hasMany関係で)。 – unreleased

+0

ユーザーは多くのイベントのゲストになれるので、ManyToManyの関係はありませんか? – Wizix

+0

あなたは 'wherePivot'を実行しようとしましたか? '$ this-> event-> guests() - > wherePivot(' user_id '、$ id) - > get() ' – bhill77

答えて

0

$user = Auth::user()->load('owned_events', 'events')); 
$events = $user->events->merge($user->owned_events)->sortBy('date'); 

return view('events.index', compact('events')); 

Goは、ユーザーモデルがはるかに簡単であるthrought行く間、イベントモデルがあまりにも大変だった:)