将主行设置为一对多关系

时间:2015-02-03 13:12:52

标签: yii2 cactiverecord

在某些情况下,您可能拥有one to many关系的默认行或主行。这由primary之类的列确定。如果您更改主要行,则可以将所需的行设置为1,将其他行设置为0;

以下是一个示例,展示了我使用Yii2解决此问题的方法。

例如:我们有两个表UserUserAddress

这是UserAddress类中的一个函数。它的作用是将当前UserAddress作为User的主要地址。

public function makePrimary() {
    $addresses = $this -> getUser() -> getUserAddresses() -> all();

    foreach ( $addresses As $address ) {
        $address -> is_primary = 0;
        $address -> save();
    }

    $this -> is_primary = 1;
    $this -> save();
}

现在我的问题,这是一个很好的方法,你通常做什么?如果没有,你能建议一个更好的方法来实现相同的结果吗?

1 个答案:

答案 0 :(得分:0)

感谢Balaji Viswanath。他的回答让我想起了另一个可以实现同样目标的解决方案。但我认为更好。

这是代码。 (这些函数在UserAddress模型类中)

public function makePrimary() {
    self::updateAll(['is_primary' => 0], 'is_primary=1 AND user_ID=' . $this -> user_ID);
    // or just
    // self::updateAll(['is_primary' => 0], 'user_ID=' . $this -> user_ID);

    $this -> is_primary = 1;
    $this -> save();
}

用上面的解决方案。我相信我已经达到了同样的目的,只有Balaji Viswanath只有2个查询,他提出了解决方案。