Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多对多关系_Php_Many To Many_Yii - Fatal编程技术网

Php 多对多关系

Php 多对多关系,php,many-to-many,yii,Php,Many To Many,Yii,我在Yii中看到了处理多对多关系的各种不同方式。然而,我看到的例子并没有完全充实,我觉得我遗漏了一些东西 例如,Larry Ullman的教程没有使用self::MANY\u MANY关系- 至于添加和检索记录,在模型、控制器和视图中处理多对多的标准方法是什么 澄清:我想我正在寻找一个包含两个表的示例,由多对多关联,在其中我不仅可以看到两个模型,还可以看到控制器和视图,这样我就可以完全理解发生了什么。我只是在使用Yii。只是一个基本的想法。如果您认为一对多不成问题,那么您需要在用户和订单之间创建

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

例如,Larry Ullman的教程没有使用self::MANY\u MANY关系-

至于添加和检索记录,在模型、控制器和视图中处理多对多的标准方法是什么


澄清:我想我正在寻找一个包含两个表的示例,由多对多关联,在其中我不仅可以看到两个模型,还可以看到控制器和视图,这样我就可以完全理解发生了什么。

我只是在使用Yii。只是一个基本的想法。如果您认为一对多不成问题,那么您需要在用户和订单之间创建一个中间表,创建一个UsersOrders表来映射这些键。然后创建函数以获取类中的相关表,如$this->UsersOrders->Orders(),用于User类中的函数Orders,反之亦然


多对多实际上是由3张桌子组成的。中间有2个表,但加上隐藏表。

你实际上需要3个表(所以是一个额外的数据透视表模型),但是一旦你有了它,你就可以实际使用正则yi关系函数。p> 例如,我的一个项目在购买和交易之间存在多对多关系(请不要问为什么:)。因此,有一个购买模型、一个交易模型和一个PurchaseToTransaction模型在它们之间建立链接。我只需执行$OpurCase->transactions,Yii将使用关系处理多对多部分,其定义如下:

'transactions' => array(self::MANY_MANY, 'Transaction', 'PurchaseToTransaction(purchaseId, transactionId)')
请注意,对于交易,同样适用,但反过来:

'purchases'   => array(self::MANY_MANY, 'Purchase', 'PurchaseToTransaction(transactionId, purchaseId)'),
因此,$OPURCASE->交易和$oTransaction->购买都由Yii自动处理


总之,它确实可以处理多对多的使用关系(至少在阅读部分,对于写作,你仍然需要任意的解决方案)。

你到底在问什么还不是很清楚……对,我知道第三个表,但我只是想知道Yii是否有一种简单的方法来处理多对多的使用关系或其他什么,如果Yii不处理它。我们可以扩展控制器,使其在用户控制器中具有类似$this->Orders()的功能,以获取所有订单的列表,以及其他用于添加/删除关系的函数。您测试过它吗?去年,当我尝试使用它时,它似乎没有得到完全支持。若答案是肯定的,那个么我们就不需要像上面那个样考虑中间表了。它应该是自动处理的。除非Yii在最新版本中完全支持它。那么这些任意的解决方案会是什么呢?另外,我是否必须为桥接表创建模型?是的,您必须创建模型,但它可以是一个带有透视表名称的空模型,没有进一步的逻辑。至于其他解决方案,有这样的行为,例如:最后的Yii版本也将包括增强的功能:您不需要为中间表创建一个模型类,除非您想附加额外的逻辑。@Matt Kantor但是如果不需要为中间表创建一个模型,您如何将记录保存到该表中?我有与Ivan的问题相同,如何更新中间表?由于这两种方法都需要从中间表中获取数据,因此我们需要一种将条目插入表中的方法,如果没有它,如何插入新条目?