从两列中检索和排序数据

时间:2017-08-13 14:36:30

标签: php laravel

我开始感到困惑。我有一个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');
}

它有效...但它只给我所拥有的事件,而不是我的用户是客人的地方......我认为有一个更好的方法来做到这一点。对一个请求的两个调用非常糟糕,两个负载更糟糕没有?

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案:

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

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

通过事件模型太难了,而用户模型更容易:)