2012-03-23 59 views
2

我正在使用Yii框架構建一個Web應用程序,而我對它很陌生。 我有3分貝表。一個存儲用戶,第二個產品,第三個存儲關係表,存儲user_id,product_id和更多信息,比如產品購買時間。使用Yii從關係表中獲取更多數據

我配置了MANY_MANY關係,並且沒有問題可以獲得用戶購買的所有產品。但是我無法弄清楚如何從關係表中獲得額外信息?

謝謝

+0

顯示一些代碼。 – Jon 2012-03-24 09:14:38

回答

3

如果你的公會擁有更多的數據,你可以宣佈自己爲一類Purchase,並添加這些關係:

class User extends CActiveRecord 
{ 
    public function relations() 
    { 
    return array(
     'purchases' => array(self::HAS_MANY, 'Purchase', 'user_id'), 
     // Products purchased by this user 
     'products' => array(
     self::HAS_MANY, 'Product', 'product_id', 
     'through' => 'purchases', 
    ), 
    ); 
    } 
} 

class Purchase extends CActiveRecord 
{ 
    // You need to add this, since every purchase is uniquely identified 
    // by user and product. Surrogate 'id' key is also fine 
    public function primaryKey() 
    { 
    return array('user_id', 'product_id'); 
    } 

    public function relations() 
    { 
    return array(
     'user' => array(self::BELONGS_TO, 'User', 'user_id'), 
     'product' => array(self::BELONGS_TO, 'Product', 'product_id'), 
    ); 
    } 
} 

其餘來自UserProduct模式MANY_MANY關係刪除。請注意使用through的關係。獲取數據可能是這樣的:

$users = User::model()->with('purchases.product')->findAll(); 
foreach ($users as $user) { 
    echo $user->username . "<br>"; 
    echo 'Purchases<br>'; 
    foreach ($user->purchases as $purchase) { 
    echo "Date: {$purchase->purchased_at}<br>"; 
    echo "Product: {$purchase->product->name} <br>"; 
    } 
    echo '<hr>'; 
} 

這將從User表連接的另外兩個表執行只有一個查詢。另外User::model()->with('products')將有效地找到他們購買產品的用戶。您的數據庫方案可以保持不變,除非您需要在關聯表中添加複合主鍵。

有關詳細說明,請參閱this article in the Yii wiki