リレーションシップを使用してデータをフェッチする際に問題が発生しています。詳細は次のとおりです。
私は2つのテーブルを持っています。1つ目はitem_masterで、2つ目は在庫テーブルです。両方がMANY_MANY関係を持っているので、2つのフィールド(item_id、inventory_id)を持つinventory_itemsという名前の別のテーブルがあります。
以下は、ItemMasterモデルの関係の詳細です。
'inventories' => array( self::MANY_MANY, 'Inventories', 'inventory_items(item_id, inventory_id)' ), 'inventoryItems'=>array(self::HAS_MANY,'InventoryItems','item_id'),
特定のインベントリのアイテムのみをフェッチする必要があります。このために、私は以下のフィルター基準を実装しています:
$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));
問題:
上記のコードは、必要な在庫を持つすべてのアイテムを返します。また、アイテムがその在庫に属していない場合でも、そのアイテムは返されますが、在庫はありません。特定の在庫に属するアイテムのみが返される必要があります。