在某些情况下,您可能拥有one to many
关系的默认行或主行。这由primary
之类的列确定。如果您更改主要行,则可以将所需的行设置为1
,将其他行设置为0
;
以下是一个示例,展示了我使用Yii2
解决此问题的方法。
例如:我们有两个表User
和UserAddress
这是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();
}
现在我的问题,这是一个很好的方法,你通常做什么?如果没有,你能建议一个更好的方法来实现相同的结果吗?
答案 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个查询,他提出了解决方案。