database - 迁移中的 Laravel 关系?

标签 database migration relationship laravel

我知道您可以使用 $this->belongs_to()$this->has_many() 等轻松定义表关系,但我不知道了解关系表是如何创建的;将两个表绑定(bind)在一起的表(我忘了这个词叫什么)。

假设我正在创建一个用户表。我希望该用户属于某个“角色”。有多个角色,每个角色可以有多个用户。我还需要为此创建一个 roles 表。到目前为止,还不错。

但在阅读文档后,它说我应该在模型中添加 $this->belongs_to(),而不是迁移本身。何时以及如何创建关系表?如果我创建 rolesusers 表,并将 $this->belongs_to('roles') 添加到 users模型,$this->has_many('users')roles模型,会自动创建中间表吗?

最佳答案

创建迁移时,您可以在表上指定外键, 即

public function up()
{
    Schema::table('roles', function(Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        //rest of fields then...
        $table->foreign('user_id')->references('id')->on('users');
    });
}

这将在角色表的 user_id 列上创建一个外键。 外键的好处是,当进行更新或删除时,外键表将自动更新或“级联” 发现很好的描述here

如 Laravel 文档中所述,您还可以使用以下语法指定更新时的级联

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

我会尝试比文档更好地解释它,所以请阅读 "Relationships" Eloquent ORM 文档的一部分,看看它是如何完成的。

关于database - 迁移中的 Laravel 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541057/

相关文章:

html - 贝塞尔曲线和椭圆的关系?

ios - RestKit CoreData 一对多关系映射,To Many 部分不起作用

sql-server - 数据库加密 : MSSQL 2008+ Database Encryption and use in Coldfusion

c# - 如何在迁移中使用 DbContext?

php - 将列类型更改为 tinyInteger

python - Flask-admin 只读集合

database - Golang gocql无法连接到Cassandra(使用Docker)

sql - 如何计算 OLAP 立方体的可能大小

c# - 在 C# .Net 软件中使用 my_sql 数据库的更好方法是什么?

spring-mvc - Spring从3.2迁移到4.1.1 : trouble with JSON serialization