2
我正在使用Yii框架構建一個Web應用程序,而我對它很陌生。 我有3分貝表。一個存儲用戶,第二個產品,第三個存儲關係表,存儲user_id,product_id和更多信息,比如產品購買時間。使用Yii從關係表中獲取更多數據
我配置了MANY_MANY關係,並且沒有問題可以獲得用戶購買的所有產品。但是我無法弄清楚如何從關係表中獲得額外信息?
謝謝
我正在使用Yii框架構建一個Web應用程序,而我對它很陌生。 我有3分貝表。一個存儲用戶,第二個產品,第三個存儲關係表,存儲user_id,product_id和更多信息,比如產品購買時間。使用Yii從關係表中獲取更多數據
我配置了MANY_MANY關係,並且沒有問題可以獲得用戶購買的所有產品。但是我無法弄清楚如何從關係表中獲得額外信息?
謝謝
如果你的公會擁有更多的數據,你可以宣佈自己爲一類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'),
);
}
}
其餘來自User
和Product
模式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。
顯示一些代碼。 – Jon 2012-03-24 09:14:38