【发布时间】:2017-08-13 14:36:29
【问题描述】:
我开始感到困惑。我有一个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');
}
它有效......但它只给我拥有的事件,而不是我的用户是客人的地方......我认为有更好的方法来做到这一点。一个请求的两次调用非常糟糕,两次加载更糟糕,不是吗?
【问题讨论】:
-
一个活动可以有很多客人,所以我想一对多的关系会存在(在客人功能上 hasMany 关系)。
-
一个用户可以成为许多活动的嘉宾,所以它是多对多关系吗?
-
你试过uisng
wherePivot吗?$this->event->guests()->wherePivot('user_id', $id)->get() -
还是不行,我应该有 7 个事件,而我只有 5 个,我的用户创建的 5 个..
-
当我 dd($guested) 时,它是空的......