我在会议上有一个注册背景。免费注册只有一个步骤。如果是付费注册,则有两个步骤。
注册的第一步是由用户填写注册表格,然后单击“存储注册”按钮,信息将存储在数据库中,并且注册表的“状态”列始终存储为“我”(不完整)。
如果是免费注册,则没有其他步骤。
但是,如果它是付费注册,则还有另一个步骤。在此步骤2中,用户需要在会议开始日期之前进行注册。支付注册费用后,注册表格的“状态”列将保持值为“ C”(完整)。
疑问:
如果是付费注册,则必须在步骤1之后向用户签发形式发票,然后在步骤2之后(即需要付款后向用户签发发票/收据)。
我的疑问是如何针对开具发票和发票的上下文组织数据库。在每个付费注册中,有必要在用户单击“商店注册”按钮并将所有注册信息存储在db中之后开具形式表,然后在付款后开具发票。必须具有两个模型/表“发票”和“形式表”,并且每个模型/表与注册表具有1对1的关系。还是与注册表相关的1个必需表?
现在,我创建了两个表Proforma和Invoice,这些表与Registration表的关系如下1到1所示,但是我不知道它是否正确。
表结构:
registration columns: id, status, conference_id, user_that_did_registration
proformas: id, proforma_number, registration_id
invoices: id, invoice_number, registration_id
该问题的相关模型:
注册模型:
class Registration extends Model
{
public function customer(){
return $this->belongsTo(User::class, 'user_that_did_registration', 'id');
}
public function participants(){
return $this->hasMany('App\Participant');
}
public function registration_types(){
return $this->belongsToMany('App\RegistrationType', 'registration_registration_types');
}
public function conference(){
return $this->belongsTo('App\conference');
}
public function proforma()
{
return $this->hasOne('App\Proforma');
}
public function invoice()
{
return $this->hasOne('App\Invoice');
}
}
形式模型:
class Proforma extends Model
{
public function registration()
{
return $this->belongsTo('App\Registration');
}
}
发票模型:
class Invoice extends Model
{
public function registration()
{
return $this->belongsTo('App\Registration');
}
}
答案 0 :(得分:0)
根据您的描述,您的设计看起来非常接近。由于并非所有注册都具有形式或发票,因此在单独的表中具有形式和发票是有意义的。我只会做一个更改-如果形式与发票之间的关系是真正的一对一,那么您可以将所有字段都放在一个记录中:
Proformas
ID
Registration_ID
Proforma_Number
Invoice_Number