laravel - 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');
}
}
谢谢您的帮助。
解决方案
从文档
Eloquent 关系被定义为 Eloquent 模型类的方法。因为,就像 Eloquent 模型本身一样,关系也可以作为强大的查询构建器,将关系定义为方法提供了强大的方法链接和查询能力
你提到的迁移是:
1.外键只是确保您的数据是一致的。
如果我们对外键定义应用删除级联,当父行删除时,引用行将自动删除。
如果我们对外键定义应用更新级联,子行将在父行更新时自动更新
推荐阅读
- java - 存储、检索、编辑和删除数据
- c# - 如何执行异步等待函数导入/SP EF6
- python - 类中的方法不会接受参数
- azure - 删除了一个 Azure 应用服务插槽,现在我在尝试重新创建它时无法取回原始主机名
- ruby-on-rails - 如何根据 REMOTE_USER 更改 Rails 路线
- java - 如何通过实现ANTLR生成的Visitor来创建复杂的POJO
- jquery - 使用jquery从表格中的多个单元格中减去
- typescript - 基类和 mixins 如何与 vue-class-component 一起使用?
- python - 将对象标记为只读
- java - JTable上的最小值单元格如何着色?