定义两个模型中的两个表之间的关系和在正确的迁移文件中定义它有什么区别?
例如,我希望表cars
和表persons
之间存在多对一关系。
选项 1:我在模型中定义关系
模特人:
class Person extends Model
{
public function cars()
{
return $this->hasMany('AppCar');
}
}
模型车:
class Car extends Model
{
public function persons()
{
return $this->belongsToMany('AppPerson');
}
}
选项 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 模型本身一样,关系也可以作为强大的查询构建器,因此将关系定义为方法提供了强大的方法链接和查询功能
您提到的迁移是:
1.外键只是确保您的数据一致。
如果我们在删除级联上应用于外键定义,则当父行将删除时,引用行将自动删除。
如果我们在更新级联上应用外键定义,子行将在父行更新时自动更新
这不是一回事。
hasOne()
、hasMany()
、belongsToOne()
和belongsToMany()
函数只是返回SQL查询结果的查询生成器。
例如,示例中id
为 1 的Person
模型的cars()
方法返回查询SELECT * FROM cars WHERE person_id=1
的结果。
但是,外键与在 SQL 脚本中创建cars
表的用途相同。例如:
CREATE TABLE cars (
...
person_id INT REFRENCES person(id),
...
);