Laravel 如何定义以下关系

Laravel 如何定义以下关系,laravel,eloquent,laravel-8,eloquent-relationship,Laravel,Eloquent,Laravel 8,Eloquent Relationship,我正在用laravel开发一个p2p应用程序。我有两个表,即用户表和贷款表 首先,用户可以是贷款人或借款人 然后用户可以拥有多个贷款,并且多个贷款属于多个用户 此外,一笔贷款可以属于一个借款人,也可以属于多个贷款人 为了进一步解释,借款人(或用户)将创建贷款记录。然后,系统将分配贷款并将其分配给多个贷款人 比如说,一个借款人想要3000英镑的贷款。我们的系统将贷款分为2000和1000(或1500和1500,或2500和500等)。然后将其分配给两个贷款人 现在可能是更多的贷款人或更大的金额 那

我正在用laravel开发一个p2p应用程序。我有两个表,即用户表和贷款表

首先,用户可以是贷款人或借款人

然后用户可以拥有多个贷款,并且多个贷款属于多个用户

此外,一笔贷款可以属于一个借款人,也可以属于多个贷款人

为了进一步解释,借款人(或用户)将创建贷款记录。然后,系统将分配贷款并将其分配给多个贷款人

比如说,一个借款人想要3000英镑的贷款。我们的系统将贷款分为2000和1000(或1500和1500,或2500和500等)。然后将其分配给两个贷款人

现在可能是更多的贷款人或更大的金额

那么,我如何用拉威尔的口才来定义这样的事情呢

这是我到现在为止的想法

  • 用户和贷款将具有多对多关系

  • 贷款表将有一个贷方数据列,该列将是一个包含贷方id和金额的数组

  • 但我真的想不出一个办法来获得一个贷款人的所有贷款。那我该怎么做呢


    那是很多词。谢谢阅读。

    首先,这个问题很模糊,没有显示任何我认为所有问题都应该显示的代码。回答这样的问题很难,因为这些问题不一定有预先确定的答案

    就个人而言,我会研究中间表模型:

    这样,您可以有一个
    贷方
    表、一个
    贷款
    表、一个
    用户
    表,以及一个类似于
    贷款金额
    表的“中间”表。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
    ,还要将透视表设置为
    贷款用户
    (注意透视单数)


    这是从头开始写的,没有经过测试,但这是如何完成任务的想法/方法。

    谢谢你的回答。我没有写任何代码,因为我不知道我应该在这里写什么代码。此外,我已经在为贷款和用户使用透视表。我真的需要另一张透视表吗?谢谢你的回答。试一下,让我们知道它是否有效。如果你决定这样做,如果出现一些错误,请发表评论,我会尽力帮助你。实际上,我是在第一个答案的帮助下完成的。我使用了中间表以及用户和贷款组合表,现在一切正常,我只是忘了将答案标记为已接受。再次感谢,顺便说一句。