【问题标题】:Laravel relation between 3 tables?3张表之间的Laravel关系?
【发布时间】:2016-12-11 22:31:09
【问题描述】:

我有以下表格:

  1. 用户(经典 laravel 表)
  2. 事件
  3. user_events

在 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 控制器我得到一个事件 ID 的列表。

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

Laravel 5 relation between 3 tables

Laravel Eloquent Relation between 3 table

我的问题是,如何才能通过此事件 ID 的事件名称?

【问题讨论】:

    标签: laravel eloquent laravel-5.3


    【解决方案1】:

    你可以pluck来自$user->userEvents返回的集合中的name

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      通过查看您的架构,关系应该是 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
      

      【讨论】:

      • 只通知其他用户:我也有一个合成器错误,有 UserEvent 而不是 EventUser,更改后一切正常 :),谢谢
      猜你喜欢
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      相关资源
      最近更新 更多