如何在Laravel中创建数据透视表

时间:2019-01-11 20:22:16

标签: php mysql laravel laravel-5.5

我有一个正在创建的赞助应用程序,并试图使数据透视表在我的用户和孩子之间运行,但是当我有一个用户赞助孩子时,数据透视表kid_user不会填充{ {1}}或kid_id。不确定我缺少什么。

  • 孩子可以拥有尽可能多的用户(赞助商)。
  • 用户可以多次赞助一个孩子,多个孩子或同一个孩子 如果需要的话。

这是我的user_id数据透视表:

kid_user

然后在用户模型上:用户可以有很多孩子...

public function up()
{
    Schema::create('kid_user', function (Blueprint $table) {
        $table->integer('kid_id')->unsigned()->index();
        $table->foreign('kid_id')->references('id')->on('kids')->onDelete('cascade');
        $table->integer('user_id')->unsigned()->index();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->primary(['kid_id', 'user_id']);
    });
}

然后在Kid模型上:孩子可以有很多用户...

public function kid()
{
    return $this->hasMany(Kid::class);
}

这是我正在使用的表格。(表格中仅包含相关信息)

  public function user() {
      //return $this->belongsTo(User::class); (Tried this..)
        return $this->hasMany(User::class);
  }

因此,当用户赞助孩子时。我希望将+---------------------+ | Tables_in_Database | +---------------------+ | kid_user | | kids | | users | +---------------------+ +-----------------------------+ | users table | +----+------------+-----------+ | id | first_name | last_name | +----+------------+-----------+ | 1 | John | Smith | | 2 | Jane | Doe | +----+------------+-----------+ +-----------------------------+ | kids table | +----+------------+-----------+-------+ | id | first_name | last_name | slots | +----+------------+-----------+-------+ | 1 | Bobby | Little | 3 | -> Can be sponsored 3 times +----+------------+-----------+-------+ +--------------------+ | kid_user table | THE BELOW RESULTS ARE WHAT I'M LOOKING FOR. +--------------------+ | *kid_id | *user_id | * = Primary Key +---------+----------+ | 1 | 1 | -> Sponsored 1st Slot +---------+----------+ | 1 | 2 | -> Sponsored 2nd Slot +---------+----------+ | 1 | 1 | -> Sponsored 3rd Slot +---------+----------+ kid_id输入到user_id数据透视表中。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,您可能想对模型中的函数进行重命名,因为它在关系中没有一个,但是有很多。

因此,在您的用户模型中添加以下内容:

public function kids()
{
    return $this->belongsToMany(Kid::class);
}

在您的Kid模型中:

public function users()
{
     return $this->belongsToMany(User::class);
}

然后要保存到数据透视表,因为您的表命名正确,只需执行以下操作:

$user->kids()->attach($kid);

将其正确保存在数据透视表中。首先确保您已有变量的User和Kid。更多详细信息here