📜  laravel 多对多迁移 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:14.434000             🧑  作者: Mango

Laravel 多对多迁移 - PHP

在Laravel中,多对多关系是指两个或多个不同的数据实体之间存在的关系。这种关系通常需要一个中间表来跟踪多个实体之间的关系。Laravel的迁移系统可以让我们轻松地创建这种多对多关系的中间表。

创建多对多关系的迁移

若要创建多对多关系的迁移,我们需要使用 Schema 类的 create 方法来创建一个新表,然后在该表中添加必要的字段。

以下是一个基本的多对多关系迁移:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateBooksUsersTable extends Migration
{
    public function up()
    {
        Schema::create('books_users', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('book_id');
            $table->unsignedBigInteger('user_id');
            $table->timestamps();

            $table->foreign('book_id')->references('id')->on('books')->onDelete('cascade');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

    public function down()
    {
        Schema::dropIfExists('books_users');
    }
}

在上面的迁移中,我们使用 id() 方法创建一个自增主键列。接下来,我们添加了两个外键列,用于跟踪 booksusers 表之间的多对多关系。我们还添加了一个 timestamps() 方法,以记录每个条目的创建和更新时间。

最后,我们使用 foreign 方法来定义每个外键列的约束。这样,当删除对应的 booksusers 表记录时,中间表中对应的数据也将被自动删除。

使用多对多关系

一旦我们创建了多对多关系的迁移,我们就可以在模型中使用 belongsToMany 关系来定义这个关系,如下所示:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasFactory;

    public function books()
    {
        return $this->belongsToMany(Book::class);
    }
}

在上面的例子中,我们在 User 模型中定义了一个 books 方法,该方法通过 belongsToMany 方法定义多对多关系。我们将 Book 模型作为想关联的模型类传递给 belongsToMany 方法,以便建立 books_users 表中的关系。

我们还可以使用 withTimestamps 方法为中间表添加时间戳值:

public function books()
{
    return $this->belongsToMany(Book::class)->withTimestamps();
}
结论

在Laravel中建立多对多关系,需要用到迁移系统和模型关系。迁移系统帮助我们创建跟踪多对多关系的中间表,而模型关系则提供了更加抽象的API,以便于使用和维护。

以上就是关于Laravel多对多迁移的介绍。