一对一的关系,只在Laravel单向走

Vic*_*Vic 2 entity-relationship database-relations one-to-one has-one laravel

是否有可能/权利在表之间建立只有一种方式的关系?我有一个invoices表,我需要在其他表中引用喜欢commission_payments,membership_paymentsinvoices表不需要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_idinvoices表中寻找字段?我希望查询类似这样:

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的每个表添加一列?目前只有两个,但这可能会增长.此外,当为佣金支付生成发票时,它不需要会员付款字段,所以我认为它不应该去那里.

pat*_*cus 7

使用hasOnebelongsTo关系设置一对一关系.hasOne关系的一方假设外键存储在另一个表中.belongsTo关系的一面有外键.

因此,由于发票的外键存储在commission_payments和membership_payments表中,因此这些模型称为属于发票表.

从改变你的关系hasOnebelongsTo,你应该是好去:

class CommissionPayment extends Model{
    public function invoice() {
        return $this->belongsTo('App\Models\Invoice');
    }
}
Run Code Online (Sandbox Code Playgroud)