两个模型之间有很多关系

时间:2012-02-11 06:33:48

标签: php mysql relational-database yii

我的数据库是这样的

  == 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'),

现在我想知道两个模型之间的关系是否正确?欢迎任何建议。

1 个答案:

答案 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方法的更多信息。