如何在yii2中处理多对多关系以及如何将数据插入到桥表中

时间:2014-12-03 08:20:03

标签: sql-server database many-to-many yii2

我正在使用sql server 2008和yii​​2。 为了建立多对多关系,我创建了一个交叉引用表来连接两个查找表。 在CRUD生成之后,这是生成的模型关系。

/**
 * @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 个答案:

答案 0 :(得分: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关系将产品绑定到类别。

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