Yii表关系

时间:2012-10-01 22:18:25

标签: php activerecord yii

我对Yii真的很陌生。我有3张桌子:

  1. 供应商(sid,sname)// pk - > SID,
  2. 产品(pid,pname)// pk - > PID,
  3. IncomingProducts(pid,sid,qty)// pk - > (pid,sid)
  4. 我想在表IncomingProducts中形成一个关系,以便我可以一次检索以下信息:(pname,sname,qty)。

    所有这些信息都应基于表格IncomingProducts。 有帮助吗?

2 个答案:

答案 0 :(得分:1)

IncomingProducts必须包含id-> pk字段,因为它可以包含许多具有相同(pid,sid)对的记录。

任何记录(id,pid,sid,qty)都有一个Suplier和一个Product,因此IncomingProducts模型的关系是:

public function relations()
{
    return array(
        'supplier' => array(self::HAS_ONE, 'Suppliers', array('sid'=>'sid')),
        'product' => array(self::HAS_ONE, 'Products', array('pid'=>'pid')),
    );
}

不确定FK - array('sid'=>'sid'),但认为'sid'不起作用(您需要指定'IncomingProducts'的键,其中包含'Supliers.sid')。关于使用'fk'=>'pk'关系,您可以在此处阅读:http://www.yiiframework.com/doc/api/1.1/CActiveRecord#relations-detail

您可以在Supliers模型中获取所有相关产品的所有传入产品:

public function relations()
{
    return array(
        'incoming' => array(self::HAS_MANY, 'IncomingProducts', 'sid'),
    );
}

答案 1 :(得分:0)

我假设供应商和产品之间存在多对多的关系。在IncomingProducts中,您可以按如下方式定义关系

public function relations()
{
    return array(
        'suppliers' => array(self::HAS_MANY, 'Suppliers', 'sid'),
        'products' => array(self::HAS_MANY, 'Products', 'pid'),
    );
}

您可以阅读有关Yii的关系活动记录here

的更多信息