laravel - 如何在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
orloan_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()
如果你有一个独特的约束,它们是特别重要的方法。
推荐阅读
- java - SOAP 服务工作正常 SOAP UI 但在 Java 代码中解析 WSDL 会引发异常
- javascript - 如何修复 Popup 以在我的网页上工作?
- php - 如果我在 PHP 中使用第 n 个索引启动一个数组,它将占用多少内存?
- php - 通过 url 将产品添加到购物车会在第一次访问时提供 404 并在第 2 次访问
- sql-server - SQL Server 查询以进行借方/贷方指定表中的计算列
- azure-cosmosdb - 检查数组的内容——CosmosDB
- c# - Url.Action(params) 在末尾添加 ')'
- perf - perf 报告单个睡眠的多个 sched:sched_stat_sleep 事件
- javascript - 在 React 中传递函数和钩子?还是把它们放在一起?
- javascript - 如何将txt文件中的数据保存到函数外的数组中?