首页 > 解决方案 > Eloquent:在模型和迁移中定义关系之间的区别

问题描述

在两个模型中定义两个表之间的关系和在正确的迁移文件中定义它有什么区别?

cars例如,我想要 table和 table之间的多对一关系persons

选项 1:我在模型中定义关系

模特儿:

class Person extends Model
{
    public function cars()
    {
        return $this->hasMany('App\Car');
    }
}

模型车:

class Car extends Model
{
    public function persons()
    {
        return $this->belongsToMany('App\Person');
    }
}

选项 2:我在迁移中定义关系

class CreateCarsTable extends Migration
{
    public function up()
    {
        Schema::create('cars', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('person_id')->references('id')->on('person');
            $table->timestamps();
        });
    }

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

谢谢您的帮助。

标签: laraveleloquent

解决方案


文档

Eloquent 关系被定义为 Eloquent 模型类的方法。因为,就像 Eloquent 模型本身一样,关系也可以作为强大的查询构建器,将关系定义为方法提供了强大的方法链接和查询能力

你提到的迁移是:

1.外键只是确保您的数据是一致的。

  1. 如果我们对外键定义应用删除级联,当父行删除时,引用行将自动删除。

  2. 如果我们对外键定义应用更新级联,子行将在父行更新时自动更新


推荐阅读