2014-12-03 106 views
2

我正在使用sql server 2008和yii​​2。 为了建立一个多对多的关系,我制作了一个交叉引用表,并加入了两个查找表。 在生成CRUD之后,这是生成的模型关系。如何在yii2中使用多对多的关系以及如何将数据插入到桥表中

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getEmailPageLists() 
{ 
    return $this->hasMany(EmailPageList::className(), ['email_id' => 'id']); 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getPages() 
{ 
    return $this->hasMany(PageLists::className(), ['page_id' => 'page_id'])->viaTable('email_page_list', ['email_id' => 'id']); 
} 

现在我该如何链接这些表?我在哪里可以使用link()函数? 我想在插入表格时插入桥表。

回答

1

这是一个多对多的关系的一个例子:

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getRecipes() 
{ 
    return $this->hasMany(Recipe::className(), ['id' => 'Recipe_id']) 
     ->viaTable('RecipeProduct', ['Product_id' => 'id'], function($query) { 
      return $query->where('RecipeProduct.status = "active"'); 
     }); 
} 

或者

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getProductProductCategories() 
{ 
    return $this->hasMany(ProductProductCategory::className(), ['Product_id' => 'id']); 
} 
/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getCategories() 
{ 
    return $this->hasMany(ProductCategory::className(), ['id' => 'ProductCategory_id']) 
     ->via('productProductCategories'); 
} 

这是如何定义通过其他模型的关系的例子。在这种情况下,我通过上面定义的称为productProductCategories的关系将产品绑定到类别。

这是链接到活动记录,滚动到机器人的链接部分http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#working-with-relationships。我没有尝试通过多对多记录进行链接。

+0

啊哈!我想我找到了我的解决方案。我面临的主要问题是在桥表中插入数据,这是我为多对多关系所做的。 我在控制器的create函数中创建了桥表模型类的对象,并为它赋值.Voila !!!就是这样!现在它会自动插入桥表中。 :) – Rabib 2014-12-08 05:33:53

+0

您是否尝试过使用Link进行插入,而没有将关系表作为模型。我不相信,但我从来没有尝试过。 – 2014-12-08 07:11:17

+0

不,我没有使用链接功能。只需从我的控制器功能插入数据。 – Rabib 2014-12-08 07:30:42

相关问题