Laravel 3张桌子之间的关系?

时间:2016-12-10 11:48:50

标签: laravel eloquent laravel-5.3

我有以下表格:

  1. 用户(经典laravel表)
  2. 事件
  3. user_events
  4. 在user_events中的

    我将已分配的用户插入到事件中,表结构是这样的:

    Schema::create('user_events', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
        $table->integer('event_id')->unsigned();
        $table->foreign('event_id')->references('id')->on('events')->onUpdate('cascade')->onDelete('cascade');
        $table->timestamps();
    });
    

    我想用auth用户为他的活动创建一个页面。

    要获得Id,我在模型用户中使用以下关系:

    public function userEvents() {
        return $this->hasMany('App\Models\UserEvent');
    }
    

    Trought controller我得到了一个事件ID列表。

    我之前的消息来源是: Laravel relation between 3 models

    Laravel 5 relation between 3 tables

    Laravel Eloquent Relation between 3 table

    我的问题是,如何处理此事件ID的事件名称?

2 个答案:

答案 0 :(得分:1)

您可以 pluck name返回的$user->userEvents来自<{1}}:

$user->userEvents->pluck('name');

希望这有帮助。

答案 1 :(得分:0)

通过查看您的架构,关系应该是many-to-many而不是one-to-many

所以你在User模型中的关系看起来像是:

public function events()
{
    return $this->belongsToMany('App\Models\Event');
}

然后在您的控制器中,通过以下方式获取经过身份验证的用户的所有事件:

$events = auth()->user()->events; // returns collection of Event model