我的数据库是这样的
== Invoices ==
id
customer_id
== Customers ==
id
firstname
lastname
membersince
所以我在两个模型之间建立了关系,如下所示。
发票模型中的关系定义:
'customers'=>array(self::HAS_MANY,'Invoices','customer_id'),
客户模型中的关系定义
'invoices' => array(self::BELONGS_TO, 'Invoices', 'invoice_id'),
现在我想知道两个模型之间的关系是否正确?欢迎任何建议。
答案 0 :(得分:3)
不,模型之间的关系不正确。
我认为您想要的是客户可以拥有多张发票,但发票只能由单个客户拥有,因为这是您的数据库架构所暗示的。
请注意,在下面的代码中,我区分了单数和复数形式的客户和发票,以使代码合乎逻辑且易于理解。
在这种情况下,Invoice
模型中的关系定义将如下:
class Invoice extends CActiveRecord {
public function relations() {
return array(
'customer' => array(self::BELONGS_TO, 'Customer', 'customer_id')
);
}
}
发票'属于'客户。 'Customer'
表示我们引用的模型类型为Customer
,而'customer_id'
是invoices
表中引用主键的列的名称顾客。
Customer
模型看起来有点棘手:
class Customer extends CActiveRecord {
public function relations() {
return array(
'invoices' => array(self::HAS_MANY, 'Invoice',
'customer_id', 'index' => 'id')
);
}
}
此处关系定义表明Customer
可以引用许多Invoice
模型。注意如何定义关系的其余部分。 customer_id
再次是引用Customer
的列,而'index' => 'id'
告诉Yii使用id
表中的列customers
作为关系的关键字。
您可以在Yii documentation中找到有关relations
方法的更多信息。