【发布时间】:2017-11-07 19:49:34
【问题描述】:
我有带有 uniq 字段的实体,inviteCode。当我创建新实体时,我想自动设置一些随机代码,但是这个代码必须与数据库中存在的不同,你是什么,你知道什么做法?
/**
* @ORM\Table(name="users")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
* @AssertBridge\UniqueEntity(
* groups={"registration"},
* fields="inviteCode",
* errorPath="not valid",
* message="This inviteCode is already in use."
* )
*/
class User extends AbstractUser implements UserInterface
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=500, unique=true)
* @Annotation\SerializedName("_invite_code")
*/
private $inviteCode;
我发现了类似的东西
private function calculateReference($number)
{
$multipliers = array(7,3,1);
$length = strlen($number);
$numberArr = str_split($number);
$sum = 0;
for ($i = $length - 1; $i >= 0; --$i)
{
$sum += $numberArr[$i] * $multipliers[($length - 1 - $i) % 3];
}
return $number.(10 - $sum % 10) % 10;
}
首先从表中获取最大 id,然后使用 id 调用函数 calculateReference,然后调用 setInviteCode。
但我相信学说在这个问题上存在一些东西,或者也许有人对此有很好的例子
【问题讨论】:
-
您会以何种方式使用您的邀请码?请给我们一些所需功能的背景,以推动您找到最佳解决方案:)
标签: symfony doctrine-orm unique-constraint