2012-10-10 46 views
1

我在使用关系获取数据时遇到了一个问题。以下是细节:Yii框架 - 有关于设置“INNER JOIN”关系的问题

  1. 我有两个表。首先是item_master第二是库存表。由于两者都有MANY_MANY关系,因此我们有另一个名为inventory_items的表,其中包含两个字段(item_id,inventory_id)。

  2. 下面是ItemMaster模式的关系细节:

    'inventories' => array(
        self::MANY_MANY, 
        'Inventories', 
        'inventory_items(item_id, inventory_id)' 
    ), 
    
    'inventoryItems'=>array(self::HAS_MANY,'InventoryItems','item_id'), 
    
  3. 我需要获取只有一个特定的库存项目。对于这一点,我在下面实施过滤条件:

    $criteria=new CDbCriteria; 
    
    $inventory_condition['condition']="inventoryItems.inventory_id=:inventoryID"; 
    $inventory_condition['params'] = array(
        ':inventoryID' => $filter['inventory_id'] 
    ); 
    $inventory_condition['joinType']='INNER JOIN'; 
    
    $criteria->with = array("inventoryItems"=>$inventory_condition); 
    
    $items=new CActiveDataProvider('ItemMaster',array('criteria'=>$criteria)); 
    

问题:

上面的代码返回我所有的与所需的库存物品。如果某件商品不属于该库存,则该商品将返回该商品,但不包含库存。我只需要那些只属于特定库存的物品。

+1

你使用debuger吗?如果是,那么查看生成的查询将会很好。如果你不使用它,我建议你在这里http://www.yiiframework.com/extension/dbprofiler/ - 它会帮助你理解发生了什么。并向我们​​展示查询) –

回答

0

你可能需要together选项设置为true

$inventory_condition['together']=true; 

但要小心,如果你要与SQLLIMIT使用它。