首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雄辩的一对一关系,哪种模式应该是hasOne?

雄辩的一对一关系,哪种模式应该是hasOne?
EN

Stack Overflow用户
提问于 2018-05-23 17:20:36
回答 1查看 420关注 0票数 2

我有一个上下文,用户可以在会议中注册。注册可以是免费的,也可以是付费的,这取决于进行注册的用户选择的票证类型。

疑问1:但登记和付款之间应该有1比1的关系。我怀疑"hasOne“应该是在注册模式还是在支付模式?还是一样的?在哪里有必要增加fk呢?在create_payments_table或"create_registrations_table“中,还是两者兼而有之?

疑问二:还有两种支付方式,信用卡或推荐信。在引用的情况下,将生成的引用存储在引用表中是必要的。因此,支付与参考之间也应该存在一种1比1的关系。但我同样怀疑hasOne应该在哪里?在支付中还是在参考模型中?在哪里有必要增加fk呢?在create_payments_table或"create_references_table“中,还是两者兼而有之?

怀疑1模式:

代码语言:javascript
复制
// Registration Model
class Registration extends Model
    public function payment()
        {
            return $this->hasOne('App\Payment');
        }
    }

// Payment model
class Payment extends Model
{
    public function registration()
    {
        return $this->belongsTo('App\Registration');
    }
}

怀疑2模式:

代码语言:javascript
复制
// Payment model
class Payment extends Model
{
    public function registration()
    {
        return $this->belongsTo('App\Registration');
    }

    public function reference()
    {
        return $this->hasOne('App\Reference');
    }
}
// Reference model
class Reference extends Model
{
    public function payment()
    {
        return $this->belongsTo('App\Payment');
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-23 23:36:46

Laravel使用的是一种约定,如果理解的话,它可能有助于澄清您的结构:

hasX relationships (hasOnehasManyhasManyThrough等)表示外键位于子/外部关系上。

User有一个Phone。用户表不了解电话。电话表有一个user_id列。

belongsTo relationship意味着当前表具有引用另一个表的外键。

Phone属于User

您的“怀疑1”模型代码将运行良好,这也是我建议使用的。您将在您的registration_id表中放置一个payments外键。这确保付款始终引用特定的注册(不确定用于什么目的的孤儿支付),而且由于注册甚至可能没有付款,所以不会留下一个不确定是否正确的空值。

至于“怀疑2”和引用,它取决于™️,如果一个引用总是对一次支付是唯一的,或者如果一个引用可以用于多次支付。

如果每次付款只使用一次唯一的引用,则可以应用相同的关系。将payment_id外键添加到参考表/模型中,支付有一个引用,引用属于支付。

如果引用可以应用于多个支付,那么payments表将需要一个reference_id列。支付属于参照系,而参考书有很多种。

希望这能帮上忙!编程愉快。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50494111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档