【问题标题】:Retrieve and order data from two columns从两列检索和排序数据
【发布时间】: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) 时,它是空的......

标签: php laravel


【解决方案1】:

我想我找到了解决方案:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多