2012-10-01 77 views
1

我对Yii真的很陌生。我有3个表:Yii餐桌关系

  1. 供应商(SID,SNAME)// PK - > SID,
  2. 产品(PID,PNAME)// PK - > PID,
  3. IncomingProducts(PID,SID,数量)// PK - >(PID,SID)

我想形成表IncomingProducts,这样我可以检索以下信息立刻关系:(PNAME,SNAME,数量)。

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

+0

您需要命名的主键列' ID'..你不能有SID,或PID.AS PK。 –

+0

@RajatSinghal是的,你可以使用复合主键。虽然这会限制IncomingProducts表中的产品/供应商组合的数量,但由于每个产品/供应商组合不能有多个记录 – Stu

回答

0

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

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

你可以阅读更多关于Yii中的关系活动记录here

1

IncomingProducts必须包含ID - > PK场,因为它可以包含具有相同的许多纪录(pid,sid)对。

而且任何记录(ID,PID,SID,数量)有一个Suplier和一个产品,所以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'不应该工作(您需要指定包含'Supliers.sid'的'IncomingProducts'的关键字)。关于使用“FK” =>“pk”中的关系,你可以在这里阅读:http://www.yiiframework.com/doc/api/1.1/CActiveRecord#relations-detail

你可以得到所有产品来料任何suplier在Supliers模型关系:

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