如何解决如何在laravel中关联三个表 最小的表结构要定义的关系
我正在尝试在 Laravel 中开发一个 p2p 应用程序。
我的数据库中有三个表,分别是用户、贷款和分期付款。
现在,用户和贷款可以有多个分期付款,每个分期付款将属于一个用户和一个贷款。
那么我该如何定义这种关系呢?我需要多态关系吗?如果是这样,如何将用户和贷款与单次分期付款联系起来?
解决方法
每笔分期付款将属于一个用户和一笔贷款。
这几乎回答了这个问题。
如果您的要求是“每一期都属于用户或贷款”,那么这种关系将是多态的。
最小的表结构
Schema::create('users',function (Blueprint $table) {
$table->bigIncrements('id');
... // other users fields or indexes.
});
Schema::create('loans',function (Blueprint $table) {
$table->bigIncrements('id');
... // other loans fields or indexes.
});
Schema::create('installments',function (Blueprint $table) {
$table->bigIncrements('id');
$table->foreignId('user_id')->constrained('users');
$table->foreignId('loan_id')->constrained('loans');
... // other installments fields or indexes.
});
如果分期付款的 user_id
或 loan_id
可以为空,则在 ->nullable()
之前添加 ->constrained()
。例如:
Schema::create('installments',function (Blueprint $table) {
...
$table->foreignId('user_id')->nullable()->constrained('users');
...
});
如果不能将多个分期付款与同一用户/贷款对关联,请添加唯一索引。
Schema::create('installments',function (Blueprint $table) {
...
$table->unique(['user_id','loan_id']);
...
});
要定义的关系
用户模型:
public function installments() { return $this->hasMany(Installment::class); }
public function loans() { return $this->belongsToMany(Loan::class,'installments'); }
贷款模式:
public function installments() { return $this->hasMany(Installment::class); }
public function users() { return $this->belongsToMany(User::class,'installments'); }
分期付款模式:
public function loan() { return $this->belongsTo(Loan::class); }
public function user() { return $this->belongsTo(User::class); }
https://laravel.com/docs/eloquent-relationships#inserting-and-updating-related-models
https://laravel.com/docs/eloquent-relationships#syncing-associations
https://laravel.com/docs/eloquent-relationships#updating-a-record-on-the-intermediate-table
如果您有唯一约束,syncWithoutDetaching()
和 updateExistingPivot()
是特别重要的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。