Laravel 如何定义以下关系
我正在用laravel开发一个p2p应用程序。我有两个表,即用户表和贷款表 首先,用户可以是贷款人或借款人 然后用户可以拥有多个贷款,并且多个贷款属于多个用户 此外,一笔贷款可以属于一个借款人,也可以属于多个贷款人 为了进一步解释,借款人(或用户)将创建贷款记录。然后,系统将分配贷款并将其分配给多个贷款人 比如说,一个借款人想要3000英镑的贷款。我们的系统将贷款分为2000和1000(或1500和1500,或2500和500等)。然后将其分配给两个贷款人 现在可能是更多的贷款人或更大的金额 那么,我如何用拉威尔的口才来定义这样的事情呢 这是我到现在为止的想法Laravel 如何定义以下关系,laravel,eloquent,laravel-8,eloquent-relationship,Laravel,Eloquent,Laravel 8,Eloquent Relationship,我正在用laravel开发一个p2p应用程序。我有两个表,即用户表和贷款表 首先,用户可以是贷款人或借款人 然后用户可以拥有多个贷款,并且多个贷款属于多个用户 此外,一笔贷款可以属于一个借款人,也可以属于多个贷款人 为了进一步解释,借款人(或用户)将创建贷款记录。然后,系统将分配贷款并将其分配给多个贷款人 比如说,一个借款人想要3000英镑的贷款。我们的系统将贷款分为2000和1000(或1500和1500,或2500和500等)。然后将其分配给两个贷款人 现在可能是更多的贷款人或更大的金额 那
那是很多词。谢谢阅读。首先,这个问题很模糊,没有显示任何我认为所有问题都应该显示的代码。回答这样的问题很难,因为这些问题不一定有预先确定的答案 就个人而言,我会研究中间表模型: 这样,您可以有一个
贷方
表、一个贷款
表、一个用户
表,以及一个类似于贷款金额
表的“中间”表。LoanAmount表主要是一个透视表(允许贷款人和贷款之间的多对多关系),但它也可以存储以下数据:
loan_id lender_id amount
1 1 1000
1 2 1000
那么,贷款表将只是
user_id amount
1 2000
因此,一个用户
可以有很多贷款
,但是贷款
可以有很多贷款
,我接下来会说:
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 pivot表中,您应该创建名为percentage
的字段,该字段将从全额转到用户。在LoanUser和Lander之间的第二个轴心Lander\u loan\u用户
中,您还需要分配给每个Lander\u loan\u用户关系的百分比
字段。这将是第二个透视表数据。
保存loan_用户数据后,需要将着陆器附加到第一个轴模型(第二个轴表不需要每个描述的轴模型)。由于有渴望装载着陆器的枢轴模型,当你查询一些用户和他们的贷款
$user = User::where(['loan.amount' => 3000])->first();
$user->pivot->landers;// will get you related landers
在第一个数据透视表中,您已经有了全部金额,通过同一个表中的百分比,您知道用户(借款人)得到了多少,并且在数据透视与landers表的关系中,您将知道每个landers从该贷款中得到了多少
这就像是“T”关系,字母“T”的上端是贷款方和用户,十字路口是贷款方支点,字母“T”的下端(底端)是登陆方
为了尽可能避免困难时期,请遵循Elounce的惯例(检查良好实践),例如,不要调用借款人id
而调用贷款id
,还要将透视表设置为贷款用户
(注意透视单数)
这是从头开始写的,没有经过测试,但这是如何完成任务的想法/方法。谢谢你的回答。我没有写任何代码,因为我不知道我应该在这里写什么代码。此外,我已经在为贷款和用户使用透视表。我真的需要另一张透视表吗?谢谢你的回答。试一下,让我们知道它是否有效。如果你决定这样做,如果出现一些错误,请发表评论,我会尽力帮助你。实际上,我是在第一个答案的帮助下完成的。我使用了中间表以及用户和贷款组合表,现在一切正常,我只是忘了将答案标记为已接受。再次感谢,顺便说一句。