Laravel迁移:表之间的引用关系

4

我已经阅读了Laravel Eloquent关系和数据库迁移文档,但是有一件事我不明白。我们可以通过创建迁移文件来在两个表之间建立关系,例如:

public function up()
{
    Schema::create('keywords', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->integer('keyword_group_id')->unsigned();

        $table->foreign('keyword_group_id')->references('id')->on('keyword_groups')->onDelete('cascade');
    });
}

在执行php artisan migrate命令后,我们得到了两个通过一对多关系连接的表格。 另一方面,文档描述了在两个Eloquent之间创建关系的过程。在我的情况下,它看起来像:

class Keyword extends Model
{
    public $timestamps = false;
    protected $fillable = array('name');

    public function keywordGroup()
    {
        return $this->belongsTo('App\KeywordGroup');
    }
}

class KeywordGroup extends Model
{
    public $timestamps = false;
    protected $fillable = array('name');

    public function keywords()
    {
        return $this->hasMany('App\Keyword');
    }
}

但是,如果我在迁移文件中注释掉代码字符串,这将使模型类中表之间的关系失效,那么这两个连接函数就不会创建任何关系。请问为什么我们需要在模型类中编写这些方法?keywordGroupkeywords

1个回答

2

迁移创建了您的数据库结构,如果您在此处创建外键,则会在数据库本身中添加关系。

您在模型中创建的关系对数据库本身没有影响,它们仅用于使从代码中的不同表中加载数据变得容易。这些将在您是否已在数据库中创建外键的情况下工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接