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回のロードはさらに悪いですか?
私は解決策見つけたと思う
イベントは、多くのゲストを持つことができるthroughtので、私を1対多の関係がそこに存在すると推測します(ゲスト関数hasMany関係で)。 – unreleased
ユーザーは多くのイベントのゲストになれるので、ManyToManyの関係はありませんか? – Wizix
あなたは 'wherePivot'を実行しようとしましたか? '$ this-> event-> guests() - > wherePivot(' user_id '、$ id) - > get() ' – bhill77