php - 我如何在 Yii2 中处理多对多关系

标签 php many-to-many yii2

例如,由于文档 (http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#relational-data) 在一对多中,您可以通过这种方式链接两个模型(one-many = company-zone):

$defaultZone = new Zone;
$defaultZone->name = Zone::DEFAULT_ZONE;
$company->link('zones', $defaultZone);

但是当你有像 tbl_user_market(user_id, market_id) 这样的传输表时,它如何处理多对多关系?

最佳答案

当为多对多关系使用联结表时,您必须

  1. 定义关系
  2. 将两个模型链接在一起

在用户模型中定义以下关系函数:

public function getMarkets() {
    return $this->hasMany(Market::className(), ['id' => 'market_id'])
      ->viaTable('tbl_user_market', ['user_id' => 'id']);
}

在市场模型中定义以下关系函数:

public function getUsers() {
    return $this->hasMany(User::className(), ['id' => 'user_id'])
      ->viaTable('tbl_user_market', ['market_id' => 'id']);
}

最后,保存两个模型后,将它们链接在一起:

$user = new User;
$user->name = 'Foo';
$user->save();

$market = new Market;
$market->name = 'Bar';
$market->save();

$user->link('markets', $market);

link() 的调用将填充联结表。

引用:http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#link()-detail

关于php - 我如何在 Yii2 中处理多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26763298/

相关文章:

php - SQLSTATE[23000] : Integrity constraint violation: 1052 Column 'NRP' in where clause is ambiguous

php - 简单代码 - 不输出消息

php - 如何保护jquery ajax调用使用的php页面

mysql - SQL:基于多对多表的条件的不同用户的计数

php - Yii2 ActiveRecord 模型最佳实践

javascript - Ajax 调用 DURING 另一个 Ajax 调用来接收服务器的任务计算状态并将其作为进度条显示给客户端

php - 水平和动态地连接表

php - 从数据库获取更改/插入通知的标准方法

c# - 流利的 NHibernate : how to map the where clause filter on a ManyToMany

MongoDB:引用另一个附加信息的文档