【问题标题】:Creating a joined table with laravel使用 laravel 创建连接表
【发布时间】:2020-03-18 17:29:15
【问题描述】:

我正在使用 Laravel 6。我想创建一个名为 meeting_user 的连接表,它应该连接表 meetingsusers。这是考虑到一个用户可以参加很多会议,而一个会议可以有很多用户。

用户:

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->string('surname');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('username')->unique();
    $table->string('password');
    $table->enum('permission', array(0, 1, 2));
    $table->enum('is_active', array(0, 1))->default(1);
    $table->rememberToken();
    $table->timestamps();
});

会议:

Schema::create('meetings', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->text('description');
    $table->string('id_room');
    $table->date('date');
    $table->time('start_hour');
    $table->time('end_hour');
    $table->enum('is_active', array(0, 1))->default(1);;
    $table->timestamps();
    $table->foreign('id_room')->references('id')->on('rooms');
});

我想通过迁移创建此表,此外,我希望当用户创建与许多用户的会议并在“会议”表中插入新行时,即使是新的“会议用户”表也是动态的填写添加新行。有没有办法用 Laravel 做到这一点?

【问题讨论】:

  • "我想通过迁移创建这个表" - 这部分很简单,php artisan make:migration create_meeting_user_table(或类似的),user_idmeeting_id,以及任何其他数据透视表。第二部分不是那么简单。您需要一个用于创建会议和分配将参与的用户的界面,以及用于处理attach()ing 这些用户的控制器逻辑。这在目前的状态下有点过于宽泛。您应该在提出问题之前尝试解决您的问题,因为 Stackoverflow 不是代码编写服务。

标签: sql laravel database-migration


【解决方案1】:

你必须创建第三个表 例如称为“user_meetings” 它的迁移将是

$table->unsignedBigInteger('user_id');
            $table->unsignedBigInteger('meeting_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users')- 
    >onDelete('cascade');
            $table->foreign('meeting_id')->references('id')->on('meetings')- 
    >onDelete('cascade');

然后将关系放入“用户”模型中

   public function meetings()
    {
        return $this->belongsToMany(Meeting::class, 'user_meetings', 'user_id', 'meeting_id');
    }

和“会议”模型中的关系

 public function users()
    {
        return $this->belongsToMany(User::class, 'user_meetings', 'meeting_id', 'user_id');
    }

控制器中“添加”会议的代码是

 $user->meetings()->attach($request->meetings);
        return redirect()->back()->with('success', 'successfull');

和“编辑”

   $checker->meetings()->sync($request->meetings);
                return redirect()->back()->with('success', 'successfull');

和“删除”

$checker->meetings()->detach();

希望这些步骤对你有帮助

【讨论】:

  • 你的意思是 users() 应该只是“belongsTo”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 2015-03-02
  • 2015-01-05
  • 2011-06-27
  • 1970-01-01
相关资源
最近更新 更多