我开始感到困惑。我有一个user
模型和一个event
模型。用户可以创建事件,他是所有者。但他也可以邀请参加一个活动,他是嘉宾。第一个关系是OneToMany关系,另一个是ManyToMany关系。
现在,我想要检索用户,拥有者或访客的所有事件。每个事件都按字段date
排序。
这是我的用户模型:
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();
}
}
这是事件模型:
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();
}
}
这是我尝试过的(在EventRepository中)
/**
* 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');
}
它有效...但它只给我所拥有的事件,而不是我的用户是客人的地方......我认为有一个更好的方法来做到这一点。对一个请求的两个调用非常糟糕,两个负载更糟糕没有?
答案 0 :(得分:0)
我想我找到了解决方案:
$user = Auth::user()->load('owned_events', 'events'));
$events = $user->events->merge($user->owned_events)->sortBy('date');
return view('events.index', compact('events'));
通过事件模型太难了,而用户模型更容易:)