我有一个上下文,用户可以在会议中注册。注册可以是免费的,也可以是付费的,这取决于进行注册的用户选择的票证类型。
疑问1:但登记和付款之间应该有1比1的关系。我怀疑"hasOne“应该是在注册模式还是在支付模式?还是一样的?在哪里有必要增加fk呢?在create_payments_table或"create_registrations_table“中,还是两者兼而有之?
疑问二:还有两种支付方式,信用卡或推荐信。在引用的情况下,将生成的引用存储在引用表中是必要的。因此,支付与参考之间也应该存在一种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');
}
}发布于 2018-05-23 23:36:46
Laravel使用的是一种约定,如果理解的话,它可能有助于澄清您的结构:
hasX relationships (hasOne,hasMany,hasManyThrough等)表示外键位于子/外部关系上。
User有一个Phone。用户表不了解电话。电话表有一个user_id列。
belongsTo relationship意味着当前表具有引用另一个表的外键。
Phone属于User。
您的“怀疑1”模型代码将运行良好,这也是我建议使用的。您将在您的registration_id表中放置一个payments外键。这确保付款始终引用特定的注册(不确定用于什么目的的孤儿支付),而且由于注册甚至可能没有付款,所以不会留下一个不确定是否正确的空值。
至于“怀疑2”和引用,它取决于™️,如果一个引用总是对一次支付是唯一的,或者如果一个引用可以用于多次支付。
如果每次付款只使用一次唯一的引用,则可以应用相同的关系。将payment_id外键添加到参考表/模型中,支付有一个引用,引用属于支付。
如果引用可以应用于多个支付,那么payments表将需要一个reference_id列。支付属于参照系,而参考书有很多种。
希望这能帮上忙!编程愉快。:)
https://stackoverflow.com/questions/50494111
复制相似问题