用户和用户信息模型
parent
e0084c5d77
commit
171c2e29d2
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helpers;
|
||||||
|
|
||||||
|
class Str
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 生成给定长度的随机英文字符串
|
||||||
|
*
|
||||||
|
* @param int $length
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function randomAlpha(int $length = 6): string
|
||||||
|
{
|
||||||
|
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||||
|
|
||||||
|
$max = strlen($characters) - 1;
|
||||||
|
|
||||||
|
$str = '';
|
||||||
|
|
||||||
|
for ($i=0; $i < $length; $i++) {
|
||||||
|
$str .= $characters[mt_rand(0, $max)];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Auth\Authenticatable;
|
||||||
|
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
|
||||||
|
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Foundation\Auth\Access\Authorizable;
|
||||||
|
|
||||||
|
class User extends Model implements AuthorizableContract, AuthenticatableContract
|
||||||
|
{
|
||||||
|
use Authenticatable;
|
||||||
|
use Authorizable;
|
||||||
|
use HasFactory;
|
||||||
|
|
||||||
|
public const STATUS_FROZEN = -1; // 冻结
|
||||||
|
public const STATUS_INACTIVATED = 0; // 未激活
|
||||||
|
public const STATUS_ACTIVE = 1; // 正常
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $attributes = [
|
||||||
|
'status' => self::STATUS_ACTIVE,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $fillable = [
|
||||||
|
'username',
|
||||||
|
'password',
|
||||||
|
'phone',
|
||||||
|
'phone_verified_at',
|
||||||
|
'email',
|
||||||
|
'email_verified_at',
|
||||||
|
'last_login_ip',
|
||||||
|
'last_login_at',
|
||||||
|
'register_ip',
|
||||||
|
'status',
|
||||||
|
'status_remark',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $casts = [
|
||||||
|
'phone_verified_at' => 'datetime',
|
||||||
|
'email_verified_at' => 'datetime',
|
||||||
|
'last_login_at' => 'datetime',
|
||||||
|
'status' => 'int',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Helpers\Str;
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class UserInfo extends Model
|
||||||
|
{
|
||||||
|
use HasFactory;
|
||||||
|
|
||||||
|
public const GENDER_UNKNOWN = 'unknown'; // 未知
|
||||||
|
public const GENDER_MALE = 'male'; // 男性
|
||||||
|
public const GENDER_FEMALE = 'female'; // 女性
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $attributes = [
|
||||||
|
'gender' => self::GENDER_UNKNOWN,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $fillable = [
|
||||||
|
'user_id',
|
||||||
|
'inviter_id',
|
||||||
|
'nickname',
|
||||||
|
'avatar',
|
||||||
|
'gender',
|
||||||
|
'birthday',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $casts = [
|
||||||
|
'birthday' => 'date',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected static function booted()
|
||||||
|
{
|
||||||
|
parent::saving(function ($userInfo) {
|
||||||
|
// 如果没有邀请码,则自动分配邀请码
|
||||||
|
if ($userInfo->code === null) {
|
||||||
|
do {
|
||||||
|
$userInfo->code = Str::randomAlpha(6);
|
||||||
|
} while (static::where('code', $userInfo->code)->exists());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 邀请码统一小写
|
||||||
|
$userInfo->code = strtolower($userInfo->code);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateUsersTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('users', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('username')->unique()->nullable()->comment('用户名');
|
||||||
|
$table->string('password')->nullable()->comment('密码');
|
||||||
|
$table->string('phone')->unique()->nullable()->comment('手机号');
|
||||||
|
$table->timestamp('phone_verified_at')->nullable()->comment('手机号认证时间');
|
||||||
|
$table->string('email')->unique()->nullable()->comment('邮箱');
|
||||||
|
$table->timestamp('email_verified_at')->nullable()->comment('邮箱认证时间');
|
||||||
|
$table->ipAddress('last_login_ip')->nullable()->comment('最近登录IP');
|
||||||
|
$table->timestamp('last_login_at')->nullable()->comment('最近登录时间');
|
||||||
|
$table->ipAddress('register_ip')->nullable()->comment('注册IP');
|
||||||
|
$table->tinyInteger('status')->default(1)->comment('状态: -1 冻结,0 未激活,1 已激活');
|
||||||
|
$table->string('status_remark')->nullable()->comment('状态备注');
|
||||||
|
$table->rememberToken();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('users');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateUserInfosTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('user_infos', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->unsignedBigInteger('user_id')->unique()->comment('用户ID');
|
||||||
|
$table->unsignedBigInteger('inviter_id')->nullable()->comment('邀请人ID');
|
||||||
|
$table->string('nickname', 100)->nullable()->comment('昵称');
|
||||||
|
$table->string('avatar')->nullable()->comment('头像');
|
||||||
|
$table->enum('gender', ['male', 'female', 'unknown'])->default('unknown')->comment('性别:male 男性,female 女性,unknown 未知');
|
||||||
|
$table->date('birthday')->nullable()->comment('生日');
|
||||||
|
$table->string('code', 10)->unique()->comment('邀请码(全小写)');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('user_infos');
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue