public function accept() { $members = Member::findByIds([$this->from, $this->to])->indexBy('_id')->all(); Member::makeFriends($members[$this->from], $members[$this->to], true); $this->addErrors($members[$this->from]->getErrors()); $this->addErrors($members[$this->to]->getErrors()); if (!$this->hasErrors()) { $this->delete(); } return $this; }
public function actionMembergen($n) { set_time_limit(360); $total = $count = Member::find()->count(); $groupNum = 0; while ($n > $groupNum) { $groupNum++; $members = array_fill($total + 1, rand(100, 200), []); foreach ($members as $id => &$member) { $member = new Member(); $member->_id = $id; $member->name = 'member_' . $groupNum . '_' . $id; } unset($member); foreach ($members as $id => $member) { $friendIds = array_rand($members, rand(3, 5)); foreach ($friendIds as $friendId) { $member->addFriend($members[$friendId]); } } if ($total) { foreach ($members as $member) { $distantFriendIds = array_map(function () use($total) { return rand(1, $total); }, array_fill(0, rand(3, 5), null)); $distantFriends = Member::findByIds($distantFriendIds)->all(); foreach ($distantFriends as $friend) { $friend->addFriend($member)->save(); } } } foreach ($members as $member) { $member->save(); } $total += count($members); echo $groupNum . "\t| " . count($members) . " <br>\n"; } echo "\n<br>Created " . ($total - $count); echo "\n<br>Total " . $total; }