gpt4 book ai didi

php - 使用 Yii 从关系表中获取更多数据

转载 作者:行者123 更新时间:2023-12-04 05:53:01 26 4
gpt4 key购买 nike

我正在使用 Yii 框架构建一个 Web 应用程序,我对它很陌生。
我有 3 个分贝表。第一个存储用户,第二个产品,第三个是关系表,存储 user_id、product_id 和更多信息,例如购买产品的时间。

我配置了一个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'),
);
}
}

删除剩余 MANY_MANY来自 User 的关系和 Product楷模。注意 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的详细解释。

关于php - 使用 Yii 从关系表中获取更多数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9846771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com