我有一个用户可以在会议中进行注册的上下文。注册可以免费或支付,具体取决于进行注册的用户选择的票证类型。
疑问1:但是注册和付款之间应该存在1比1的关系。我怀疑的是,“hasOne”应该在注册模型还是支付模式中?或者它是一样的?在哪里有必要添加fk?在create_payments_table或“create_registrations_table”中,还是两者兼而有之?
疑问2:此外,还有2种付款方式,信用卡或参考。在引用的情况下,必须将生成的引用存储在引用表中。因此,付款和参考之间也应该存在1比1的关系。但是我对hasOne应该在哪里有同样的疑问?在付款或参考模型中?在哪里有必要添加fk?在create_payments_table或“create_references_table”中,还是两者兼而有之?
怀疑1个型号:
// 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个型号:
// 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');
}
}
答案 0 :(得分:1)
Laravel使用的惯例在理解后可能有助于澄清您的结构:
hasX 关系(hasOne
,hasMany
,hasManyThrough
等)表示外键位于子/外关系。
User
有一个Phone
。用户表不知道手机。电话表格有user_id
列。
belongsTo 关系表示当前表具有引用另一个表的外键。
Phone
属于User
。
你的“怀疑1”型号代码效果很好,是我建议使用的。您可以在registration_id
表中放置payments
外键。这可以确保付款始终引用特定的注册(没有孤立的付款,您不确定是什么用途),并且由于注册可能甚至没有付款,您不会留下空值,而您不是确定是正确的。
至于“怀疑2”和参考资料,如果参考资料对付款总是唯一的,或者如果一个参考资料可用于多次付款,则取决于️。
如果每个付款都只有一次使用唯一参考,那么可以应用相同的关系。 {/ 1}}外键将添加到参考表/模型,付款有一个参考,参考属于付款。
如果可以将参考应用于多个付款,则payment_id
表格需要payments
列。付款属于参考,参考有很多付款。
希望有所帮助!快乐的编程。 :)