>我有一个与 cakephp 中的复杂查找条件相关的问题。我有一个有很多transaction_item的交易表(是一个结构product_id,日期的表),产品与供应商有很多对多的联系。因此,我对产品和供应商使用映射表,并在transaction_item表中使用外键进行事务。我的问题如何阅读知道交易ID的供应商及其相关产品。
例。
知道 transaction.id = 9;
我想要结果
Supplier id:1
Transaction Item 1
Transaction Item 2
Supplier id:2
Transaction Item 1
Transaction Item 3
在 SQL 中,我的查询是
SELECT
`map_table`.`supplier_id`,
`transaction_item_table`.`id`
FROM
`transaction_item_table`
INNER JOIN `map_table`
ON `transaction_item_table`.`id` = `map_table`.`product_id`
WHERE
`transaction_item_table`.`transaction_id` = 9
ORDER BY
`map_table`.`supplier_id`;
在要获取该列表的函数中的事务控制器中:
$transactionId = 9; //For your example ;-)
$this->Transaction->Behavior->attach('Containable');
$result = $this->Transaction->find(
'first',
array(
'conditions' => array(
'Transaction.id' => $transactionId
),
'contain' => array(
'TransactionItem' => array(
'Product' => array(
'Supplier'
)
)
)
)
);
上面的代码应该可以解决问题(如果我正确理解您的问题),假设您有:
- 事务
- 具有许多事务项
- 交易项有一个产品
- 产品拥有众多供应商
如果模型具有不同的名称,则可能需要修改我的示例以反映相应的模型名称。如果关系不同,它可能根本不起作用。
另外,看看 可包含的行为
$this->TransactionItemTable->find('all',
array(
'fields' => array(
'MapTable.supplier_id',
'TransactionItemTable.id'
),
'joins' => array(
array(
'table' => 'map_table',
'alias' => 'MapTable',
'type' => 'INNER',
'conditions' => array(
'TransactionItemTable.id = MapTable.product_id'
)
),
),
'conditions' => array('TransactionItemTable.transaction_id' => 9),
'order' => array('MapTable.supplier_id'=> 'ASC'),
'recursive' => -1
)
);