如何解决如何定义以下关系
我正在使用 laravel 开发 p2p 应用程序。我有两个表,分别是用户和贷款。
首先,用户可以是贷方或借方。
然后用户可以有多个贷款,多个贷款属于多个用户。
此外,一笔贷款可以属于一个借款人,也可以属于多个贷款人。
为了进一步解释,贷款记录将由借款人(或用户)创建。然后系统将分配贷款并将其分配给多个贷方。
例如:假设一个借款人想要贷款 3000。我们的系统将贷款分配为 2000 和 1000(或 1500 和 1500,或 2500 和 500 等)。然后将其分配给两个贷方。
现在可能是更多的贷方或更大的金额。
那么我如何用 laravel eloquent 定义这样的东西?
这是我目前想到的。
-
用户和贷款是多对多的关系。
-
Loans 表将有一个 lender_data 列,该列将是一个包含 lender_id 和金额的数组。
但我真的想不出一种方法来获取单个贷方的所有贷款。那我该怎么做呢?
说的太多了。感谢阅读。
解决方法
首先,这个问题很模糊,没有显示我认为所有问题都应该有的任何代码。很难回答这样的问题,这些问题不一定有预定义的答案。
就我个人而言,我会研究中间表模型:
https://laravel.com/docs/8.x/eloquent-relationships#defining-custom-intermediate-table-models
这样你就可以有一个 Lenders
表、一个 Loan
表、一个 Users
表,以及这个“中间”表,它可能类似于 LoanAmount
桌子。 LoanAmount 表主要是一个数据透视表(允许 Lenders 和 Loans 之间的多对多关系),但它也可以存储如下数据:
loan_id lender_id amount
1 1 1000
1 2 1000
那么贷款表就是
user_id amount
1 2000
所以一个 User
可以有很多 Loans
,但是 Loans
可以有很多 LoanAmounts
。
我会选择下一个:
class User extends Model
{
public function loans()
{
return $this->belongsToMany(Loan::class)->using(LoanUser::class)->withPivot(['amount','percentage']);
}
}
class Loan extends Model
{
public function users()
{
return $this->belongsToMany(User::class)->using(LoanUser::class)->withPivot(['amount','percentage']);
}
}
class LoanUser extends Pivot
{
protected $with = [
'landers',];
public function landers()
{
return $this->belongsToMany(Lander::class)->withPivot(['percentage']);
}
}
class Lander extends Model
{
public function loanUsers()
{
return $this->belongsToMany(LoanUser::class)->withPivot(['percentage']);
}
}
在loan_user 数据透视表中,您应该创建名为percentage
的字段,该字段将从全额转到用户。在 LoanUser 和 Lander lander_loan_user
之间的第二个枢轴中,您还应该需要将 percentage
字段分配给每个 lander_loan_user 关系。这将是第二个数据透视表数据。
保存贷款用户数据后,您需要将着陆器附加到第一个数据透视模型(第二个数据透视表不需要每个描述的数据透视模型)。由于有预先加载的着陆器来旋转模型,当您查询某个用户及其贷款时
$user = User::where(['loan.amount' => 3000])->first();
$user->pivot->landers;// will get you related landers
您已经在第一个数据透视表中获得了全部金额,并且通过同一个表中的百分比,您知道用户(借款人)获得了多少,并且在数据透视表与着陆器表的关系中,您将知道每个着陆器从该贷款中获得了多少。
就像“T”关系,“t”字母的上端是 Loan 和 User,十字路口是 LoanUser 支点,字母“t”的下端(底端)是着陆器。
为了尽可能避免困难,请遵循 eloquent 的约定(检查良好做法 here),例如,不要将 borrower_id
称为 loan_id
,而是将数据透视表改为是 loan_user
(注意主元单数)。
这是从头开始写的,没有经过测试,但这是任务可以/应该如何完成的想法/方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。