Vic*_*Vic 2 entity-relationship database-relations one-to-one has-one laravel
是否有可能/权利在表之间建立只有一种方式的关系?我有一个invoices表,我需要在其他表中引用喜欢commission_payments,membership_payments但invoices表不需要a commission_payment_id或a membership_payment_id.换句话说,可能发生不同类型的交易,并且它们都可能附有发票,但发票不需要引用这些交易表.
invoices commission_payments membership_payments
--------------- --------------------- ---------------------
-id -id -id
... -invoice_id -invoice_id
... ...
Run Code Online (Sandbox Code Playgroud)
我为每个表创建了Eloquent模型.我在其他两个模型上添加了一个hasOne关系invoices.
class CommissionPayment extends Model{
public function invoice(){
return $this->hasOne('App\Models\Invoice');
}
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试访问Comission Payment的附加发票,如下所示:
$com = CommissionPayment::first();
$com->invoice->id;
Run Code Online (Sandbox Code Playgroud)
然后我得到这个错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column
'invoices.commission_payment_id' in 'where clause' (SQL: select * from `invoices`
where `invoices`.`commission_payment_id` = 15 and `invoices`.`commission_payment_id` is not
null limit 1)
Run Code Online (Sandbox Code Playgroud)
为什么要commission_payment_id在invoices表中寻找字段?我希望查询类似这样:
SELECT * FROM `invoices` WHERE `id` = 23
/* id is fetched from the `invoice_id` field in the `commission_payments` table */
Run Code Online (Sandbox Code Playgroud)
我是否必须为将引用invoice_id的每个表添加一列?目前只有两个,但这可能会增长.此外,当为佣金支付生成发票时,它不需要会员付款字段,所以我认为它不应该去那里.
使用hasOne或belongsTo关系设置一对一关系.hasOne关系的一方假设外键存储在另一个表中.belongsTo关系的一面有外键.
因此,由于发票的外键存储在commission_payments和membership_payments表中,因此这些模型称为属于发票表.
从改变你的关系hasOne来belongsTo,你应该是好去:
class CommissionPayment extends Model{
public function invoice() {
return $this->belongsTo('App\Models\Invoice');
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1368 次 |
| 最近记录: |