📜  laravel 中的 foreignId - PHP (1)

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

Laravel 中的 foreignId

在 Laravel 中,我们可以使用 foreignId 方法来定义一个外键字段,用于和其他表建立关联关系。本文将介绍 Laravel 中的 foreignId 方法的使用和基本原理。

前置知识

在阅读本文之前,你需要掌握 Laravel 中的数据库迁移和模型定义。如果你对此不太熟悉,建议先学习一下相关知识。

基本使用

foreignId 方法定义的字段会在数据库中以 [field_name]_id 的形式保存,用于和其他表的主键关联。例如,我们可以这样在一个迁移文件中定义一个外键字段:

Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('content');
    $table->foreignId('user_id')->constrained();
    $table->timestamps();
});

上面的代码中,我们定义了一个 user_id 的外键字段,并调用了 constrained 方法来设置关联表和关联字段。这里假设我们有一个名为 users 的表,其主键为 id

在模型中,我们可以定义关联关系:

class Post extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

上面的代码中,我们定义了一个 user 方法来获取该文章所属的用户信息。使用时,可以这样调用:

$post = Post::find(1);
$user = $post->user;
高级用法

foreignId 方法还可以接收一个参数,用来设置外键字段的数据类型。默认为无符号整数 unsignedBigInteger。例如,如果你想使用普通整数来保存外键,可以这样:

$table->foreignId('user_id', 'INTEGER')->constrained();

另外,constrained 方法还可以接收更多参数,用于设置关联表和关联字段的额外选项,例如:

$table->foreignId('user_id')
      ->constrained('users', 'user_no')
      ->onUpdate('cascade')
      ->onDelete('set null');

上面的代码中,我们指定了关联的表为 users,关联字段为 user_no,并设置了更新和删除关联时的操作。

总结

本文介绍了 Laravel 中的 foreignId 方法的基本用法和高级用法。使用 foreignId 方法可以简化定义外键关联的过程,并提高代码可读性。如果你对此还有疑问或建议,欢迎在评论区留言。