在 Laravel 中只有一种方式的一对一关系
One-to-one relations that only go one way in Laravel
possible/right table 之间的关系是 单向 吗?我有一个 invoices
table 需要在其他 table 中引用,例如 commission_payments
和 membership_payments
但是 invoices
table不需要 commission_payment_id
或 membership_payment_id
。换句话说,可能会发生不同类型的交易,它们都可能附有发票,但发票不需要引用这些交易 tables。
invoices commission_payments membership_payments
--------------- --------------------- ---------------------
-id -id -id
... -invoice_id -invoice_id
... ...
我已经为每个 table 创建了 Eloquent 个模型。我在其他两个模型上添加了 hasOne
与 invoices
的关系。
class CommissionPayment extends Model{
public function invoice(){
return $this->hasOne('App\Models\Invoice');
}
}
然后我尝试像这样访问佣金付款的附加发票:
$com = CommissionPayment::first();
$com->invoice->id;
然后我得到这个错误:
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)
为什么要在 invoices
table 中查找 commission_payment_id
字段?我希望有这样的查询:
SELECT * FROM `invoices` WHERE `id` = 23
/* id is fetched from the `invoice_id` field in the `commission_payments` table */
我是否必须为将引用 invoice_id 的每个 table 添加一列?目前是两个,但这可能会增长。此外,当为佣金支付生成发票时,它不需要会员支付字段,所以我认为它不应该放在那里。
使用 hasOne
或 belongsTo
关系设置一对一关系。关系的 hasOne
端假定外键存储在另一端 table。关系的 belongsTo
端有外键。
因此,由于您的发票外键存储在 commission_payments 和 membership_payments table 中,因此这些模型属于发票 table .
将您的关系从 hasOne
更改为 belongsTo
,您就可以开始了:
class CommissionPayment extends Model{
public function invoice() {
return $this->belongsTo('App\Models\Invoice');
}
}
possible/right table 之间的关系是 单向 吗?我有一个 invoices
table 需要在其他 table 中引用,例如 commission_payments
和 membership_payments
但是 invoices
table不需要 commission_payment_id
或 membership_payment_id
。换句话说,可能会发生不同类型的交易,它们都可能附有发票,但发票不需要引用这些交易 tables。
invoices commission_payments membership_payments
--------------- --------------------- ---------------------
-id -id -id
... -invoice_id -invoice_id
... ...
我已经为每个 table 创建了 Eloquent 个模型。我在其他两个模型上添加了 hasOne
与 invoices
的关系。
class CommissionPayment extends Model{
public function invoice(){
return $this->hasOne('App\Models\Invoice');
}
}
然后我尝试像这样访问佣金付款的附加发票:
$com = CommissionPayment::first();
$com->invoice->id;
然后我得到这个错误:
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)
为什么要在 invoices
table 中查找 commission_payment_id
字段?我希望有这样的查询:
SELECT * FROM `invoices` WHERE `id` = 23
/* id is fetched from the `invoice_id` field in the `commission_payments` table */
我是否必须为将引用 invoice_id 的每个 table 添加一列?目前是两个,但这可能会增长。此外,当为佣金支付生成发票时,它不需要会员支付字段,所以我认为它不应该放在那里。
使用 hasOne
或 belongsTo
关系设置一对一关系。关系的 hasOne
端假定外键存储在另一端 table。关系的 belongsTo
端有外键。
因此,由于您的发票外键存储在 commission_payments 和 membership_payments table 中,因此这些模型属于发票 table .
将您的关系从 hasOne
更改为 belongsTo
,您就可以开始了:
class CommissionPayment extends Model{
public function invoice() {
return $this->belongsTo('App\Models\Invoice');
}
}