多对多的关系

djt*_*djt 5 php many-to-many yii

在Yii中,我看到了处理多对多关系的各种不同方式.然而,我看到的例子并没有完全充实,我觉得我错过了一些东西.

例如,Larry Ullman的教程不使用self :: MANY_MANY关系 - http://www.larryullman.com/2010/08/10/handling-related-models-in-yii-forms/

因此,就添加和检索记录而言,在模型,控制器和视图中处理多对多的标准方法是什么?

澄清:我想我正在寻找一个涉及2个表的例子,由多对多相关,我不仅可以看到两个模型,还可以看到控制器和视图,所以我可以完全理解发生了什么.

Bli*_*izz 5

您实际上需要3个表(因此对于数据透视表是一个额外的模型),但是一旦拥有它,您实际上可以使用常规的yii关系功能.

例如,我的项目在购买和交易之间存在多对多的关系(请不要问为什么:)).因此,有一个Purchase模型,一个Transaction模型和一个PurchaseToTransaction模型,它建立了它们之间的链接.我可以做一个$ oPurchase->事务,Yii将使用该关系处理多对多部分,它的定义如下:

'transactions' => array(self::MANY_MANY, 'Transaction', 'PurchaseToTransaction(purchaseId, transactionId)')
Run Code Online (Sandbox Code Playgroud)

请注意,对于Transactions,同样适用,但反过来说:

'purchases'   => array(self::MANY_MANY, 'Purchase', 'PurchaseToTransaction(transactionId, purchaseId)'),
Run Code Online (Sandbox Code Playgroud)

所以$ oPurchase-> transactions$ oTransaction->购买都由Yii自动处理.

总之,它确实可以处理多对多使用关系(至少在阅读部分,为了写你还需要任意解决方案).