如何定义以下关系
How to define the following relationship
我正在使用 laravel 开发一个 p2p 应用程序。我有两个 table,即用户和贷款。
首先,用户可以是贷款人或借款人。
那么用户可以有多笔贷款,多笔贷款属于多个用户。
此外,一笔贷款可以属于一个借款人,也可以属于多个贷方。
进一步说明,贷款记录将由借款人(或用户)创建。然后系统会将贷款分配给多个贷款人。
示例:假设一位借款人想要一笔 3000 的贷款。我们的系统会将贷款分配为 2000 和 1000(或 1500 和 1500,或 2500 和 500,等等)。然后将其分配给两个贷方。
现在可能是更多的贷方或更大的数额。
那么我怎样才能用 laravel eloquent 定义这样的东西呢?
这是我目前想到的。
用户和贷款之间是多对多的关系。
贷款 table 将有一个 lender_data 列,它将是一个包含 lender_id 和金额的数组。
但我真的想不出一种方法来提取单个贷方的所有贷款。那我该怎么做呢?
这是很多话。感谢阅读。
首先,这个问题很模糊,没有显示任何我认为所有问题都应该的代码。很难回答这样不一定有预定义答案的问题。
就个人而言,我会研究中间 table 模型:
https://laravel.com/docs/8.x/eloquent-relationships#defining-custom-intermediate-table-models
这样你就可以有一个 Lenders
table,一个 Loan
table,一个 Users
table,这个“在between" table 可能类似于 LoanAmount
table。 LoanAmount table 主要是一个枢轴 table (允许贷款人和贷款之间的多对多关系),但是它也可以存储数据,如:
loan_id lender_id amount
1 1 1000
1 2 1000
那么贷款 table 就是
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 数据透视表 table 中,您应该创建名为 percentage
的字段,该字段将从全部金额转到用户。在 LoanUser 和 Lander lander_loan_user
之间的第二个枢轴中,您还应该需要 percentage
字段,您将分配给每个 lander_loan_user 关系。这将是第二个枢轴 table 数据。
保存 loan_user 数据后,您需要将着陆器附加到第一个枢轴模型(第二个枢轴 table 根据描述不需要枢轴模型)。因为有急切加载的着陆器来转换模型,当你查询一些用户和他们的贷款时
$user = User::where(['loan.amount' => 3000])->first();
$user->pivot->landers;// will get you related landers
您已经在第一个数据透视表 table 中获得了全部金额,并且根据相同的百分比 table 您知道有多少用户(借款人)获得了多少,并且在数据透视表与着陆器的关系中 table 您将知道每个着陆器从这笔贷款中得到多少。
就像“T”关系,'t'字母的上端是Loan和User,十字路口是LoanUser pivot,字母't'的下端(base)是landers。
为了尽可能避免困难,请遵守 eloquent 的惯例(检查良好实践 here),例如,而不是 borrower_id
调用 loan_id
,也枢轴 table 为 loan_user
(注意枢轴单数)。
这是从头开始写的,未经测试,但这是 idea/way 如何完成任务 can/should。
我正在使用 laravel 开发一个 p2p 应用程序。我有两个 table,即用户和贷款。
首先,用户可以是贷款人或借款人。
那么用户可以有多笔贷款,多笔贷款属于多个用户。
此外,一笔贷款可以属于一个借款人,也可以属于多个贷方。
进一步说明,贷款记录将由借款人(或用户)创建。然后系统会将贷款分配给多个贷款人。
示例:假设一位借款人想要一笔 3000 的贷款。我们的系统会将贷款分配为 2000 和 1000(或 1500 和 1500,或 2500 和 500,等等)。然后将其分配给两个贷方。
现在可能是更多的贷方或更大的数额。
那么我怎样才能用 laravel eloquent 定义这样的东西呢?
这是我目前想到的。
用户和贷款之间是多对多的关系。
贷款 table 将有一个 lender_data 列,它将是一个包含 lender_id 和金额的数组。
但我真的想不出一种方法来提取单个贷方的所有贷款。那我该怎么做呢?
这是很多话。感谢阅读。
首先,这个问题很模糊,没有显示任何我认为所有问题都应该的代码。很难回答这样不一定有预定义答案的问题。
就个人而言,我会研究中间 table 模型:
https://laravel.com/docs/8.x/eloquent-relationships#defining-custom-intermediate-table-models
这样你就可以有一个 Lenders
table,一个 Loan
table,一个 Users
table,这个“在between" table 可能类似于 LoanAmount
table。 LoanAmount table 主要是一个枢轴 table (允许贷款人和贷款之间的多对多关系),但是它也可以存储数据,如:
loan_id lender_id amount
1 1 1000
1 2 1000
那么贷款 table 就是
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 数据透视表 table 中,您应该创建名为 percentage
的字段,该字段将从全部金额转到用户。在 LoanUser 和 Lander lander_loan_user
之间的第二个枢轴中,您还应该需要 percentage
字段,您将分配给每个 lander_loan_user 关系。这将是第二个枢轴 table 数据。
保存 loan_user 数据后,您需要将着陆器附加到第一个枢轴模型(第二个枢轴 table 根据描述不需要枢轴模型)。因为有急切加载的着陆器来转换模型,当你查询一些用户和他们的贷款时
$user = User::where(['loan.amount' => 3000])->first();
$user->pivot->landers;// will get you related landers
您已经在第一个数据透视表 table 中获得了全部金额,并且根据相同的百分比 table 您知道有多少用户(借款人)获得了多少,并且在数据透视表与着陆器的关系中 table 您将知道每个着陆器从这笔贷款中得到多少。
就像“T”关系,'t'字母的上端是Loan和User,十字路口是LoanUser pivot,字母't'的下端(base)是landers。
为了尽可能避免困难,请遵守 eloquent 的惯例(检查良好实践 here),例如,而不是 borrower_id
调用 loan_id
,也枢轴 table 为 loan_user
(注意枢轴单数)。
这是从头开始写的,未经测试,但这是 idea/way 如何完成任务 can/should。