2012-10-10 50 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使用它。