/** * @param UserDataField $field * @param User $user * @param mixed $value * @return UserData * @throws \InvalidArgumentException */ public static function create(UserDataField $field, User $user, $value) { // check if field is already set for user if ($user->getData($field->getName()) !== null) { throw new \InvalidArgumentException('User\'s data field ' . $field->getName() . ' already set.'); } $value = serialize($value); Aelix::db()->prepare('INSERT INTO `user_data` SET `userID` = :userID, `fieldID` = :fieldID, `value` = :value')->execute([':userID' => $user->getID(), ':fieldID' => $field->getID(), ':value' => $value]); $dataID = Aelix::db()->getPDO()->lastInsertId('user_data'); return new UserData($user, $field, $dataID, $value); }