2012-02-11 33 views
0

之間我有數據庫這樣的事情先後在兩個模型

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

現在我想知道在這兩種模式之間的關係是正確的?歡迎任何建議。

回答

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使用customers表中的id列作爲關係的關鍵。

你可以在Yii documentation找到更多關於relations方法的信息。

+0

他接受你的答案,但不upvote ......神經:) – 2012-02-11 20:56:11