Laravel 不会在用户注册后创建配置文件 table
Laravel won't create profile table after user registration
我用 'user details' 创建了配置文件 table 此 table 已连接到用户。它工作正常,直到突然配置文件 table 在注册后不会创建任何行。
我已经多次检查我的代码,我什至已经完成了我最后一次工作 git。
配置文件和用户 classes 似乎没问题。页面重定向没有错误,但未创建配置文件行没有 ID。 table 不会创建的还有什么问题?我该如何调试它?
个人资料class:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;
class Profile extends Model
{
use HasFactory;
public function user(){
return $this->belongsTo(User::class);
}
/**
* Get user age.
*/
public function get_age()
{
return Carbon::parse($this->attributes['birthdate'])->age;
}
}
用户Class
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'username',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function profile(){
return $this->hasOne(Profile::class);
}
}
简介table:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateProfilesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('profiles', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->unsignedBigInteger('user_id');
$table->string("user_name")->nullable();
$table->string("familyname")->nullable();
$table->string("location")->nullable();
$table->string("gender")->nullable();
$table->date("birthdate")->nullable();
$table->string("favorite_sport")->nullable();
$table->string("biography")->nullable();
$table->string("profil_photo")->nullable();
$table->index("user_id");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('profiles');
}
}
注册控制器:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
class RegisterController extends Controller
{
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'username' => ['required', 'string', 'max:255', 'unique:users'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\User
*/
protected function create(array $data)
{
return User::create([
'username' => $data['username'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
protected function registered(Request $request, $user)
{
return redirect(route('profile.edit', $user->username));
}
}
配置文件控制器
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class ProfilesController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index( $username )
{
return view('profiles.index', [ 'user' => $username ]);
}
public function edit( $username )
{
return view('profiles.edit', [ 'user' => $username ]);
}
}
web.php
/**
* Routes User Profile
*/
Route::get('/profiles/{username}', [App\Http\Controllers\ProfilesController::class, 'index'])->name('profile.show');
Route::get('/profiles/{username}/edit', [App\Http\Controllers\ProfilesController::class, 'edit'])->name('profile.edit');
首先你必须运行
php artisan migrate
将所有数据库设计迁移到数据库本身。这就像 运行ning sql table 为您的数据库创建代码。
所有资源创建必须由开发者完成。就像在 Register 控制器的创建方法中一样。
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\User
*/
protected function create(array $data)
{
return User::create([
'username' => $data['username'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
在您看到的代码中,它正在返回创建的用户。但是,您也需要创建配置文件。如果您将方法更改为:
$user = User::create([
'username' => $data['username'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
$user->profile()->create(['user_name' => $user->username]);
return $user;
它将创建用户并为该用户创建相关的个人资料记录。
我用 'user details' 创建了配置文件 table 此 table 已连接到用户。它工作正常,直到突然配置文件 table 在注册后不会创建任何行。 我已经多次检查我的代码,我什至已经完成了我最后一次工作 git。 配置文件和用户 classes 似乎没问题。页面重定向没有错误,但未创建配置文件行没有 ID。 table 不会创建的还有什么问题?我该如何调试它? 个人资料class:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;
class Profile extends Model
{
use HasFactory;
public function user(){
return $this->belongsTo(User::class);
}
/**
* Get user age.
*/
public function get_age()
{
return Carbon::parse($this->attributes['birthdate'])->age;
}
}
用户Class
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'username',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function profile(){
return $this->hasOne(Profile::class);
}
}
简介table:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateProfilesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('profiles', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->unsignedBigInteger('user_id');
$table->string("user_name")->nullable();
$table->string("familyname")->nullable();
$table->string("location")->nullable();
$table->string("gender")->nullable();
$table->date("birthdate")->nullable();
$table->string("favorite_sport")->nullable();
$table->string("biography")->nullable();
$table->string("profil_photo")->nullable();
$table->index("user_id");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('profiles');
}
}
注册控制器:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
class RegisterController extends Controller
{
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'username' => ['required', 'string', 'max:255', 'unique:users'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\User
*/
protected function create(array $data)
{
return User::create([
'username' => $data['username'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
protected function registered(Request $request, $user)
{
return redirect(route('profile.edit', $user->username));
}
}
配置文件控制器
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class ProfilesController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index( $username )
{
return view('profiles.index', [ 'user' => $username ]);
}
public function edit( $username )
{
return view('profiles.edit', [ 'user' => $username ]);
}
}
web.php
/**
* Routes User Profile
*/
Route::get('/profiles/{username}', [App\Http\Controllers\ProfilesController::class, 'index'])->name('profile.show');
Route::get('/profiles/{username}/edit', [App\Http\Controllers\ProfilesController::class, 'edit'])->name('profile.edit');
首先你必须运行
php artisan migrate
将所有数据库设计迁移到数据库本身。这就像 运行ning sql table 为您的数据库创建代码。
所有资源创建必须由开发者完成。就像在 Register 控制器的创建方法中一样。
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\User
*/
protected function create(array $data)
{
return User::create([
'username' => $data['username'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
在您看到的代码中,它正在返回创建的用户。但是,您也需要创建配置文件。如果您将方法更改为:
$user = User::create([
'username' => $data['username'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
$user->profile()->create(['user_name' => $user->username]);
return $user;
它将创建用户并为该用户创建相关的个人资料记录。