環境
- Laravel 8.6
- PHP 8.0
- Bootstrap 5.1
6.1 Userモデル
6.1.1 データベースの移行
既存のUserモデル、create_users_tableマイグレーションを流用する
/database/migrations/[timestamp]_create_users_table.php
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
マイグレーション適用
sail artisan migrate
6.1.2 modelファイル
/app/Models/User.php
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
protected $fillable = [
'name',
'email',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
}
6.1.3 ユーザーオブジェクトを作成する
$user = new User; // オブジェクト作成
$user->name = "Michael Hartl"; // 名前を代入
$user->email = "mhartl@example.com"; // メールアドレスを代入
$user->save(); // DBに保存
$foo = User::create(['name' => "A Nother", 'email' => "another@example.org"]); // 配列で属性を指定
$foo->delete(); // DBから削除
6.1.4 ユーザーオブジェクトを検索する
User::find(1); // id=1 のユーザーを返す
User::where('email', "mhartl@example.com"); // メールアドレスがmhartl@example.comのユーザーを検索
User::first(); // 一番最初のユーザーを返す
User::all(); // 全てのユーザーを返す
6.1.5 ユーザーオブジェクトを更新する
$user = User::find(1); // id=1のユーザーを返す
$user->email = "mhartl@example.com"; // メールアドレスを設定
$user->save(); // DBに保存
$user->update(["name" => "The Dude", "email" => "dude@abides.org"]); // カラムを指定した値に変更
6.2 ユーザーを検証する
6.2.1 有効性を検証する
6.2.2 存在性を検証する
/app/Http/Controllers/UsersController.php
public function store(Request $request)
{
$request->validate([
"name" => "required",
"email" => "required"
]);
}
6.2.3 長さを検証する
/app/Http/Controllers/UsersController.php
public function store(Request $request)
{
$request->validate([
"name" => "required|max:50",
"email" => "required|max:255",
]);
}
6.2.4 フォーマットを検証する
/app/Http/Controllers/UsersController.php
public function store(Request $request)
{
$request->validate([
"name" => "required|max:50",
"email" => "required|max:255|email",
]);
}
6.2.5 一意性を検証する
/app/Http/Controllers/UsersController.php
public function store(Request $request)
{
$request->validate([
"name" => "required|max:50",
"email" => "required|max:255|email|unique:users|email",
]);
}
ユニークインデックス追加
sail artisan make:migration add_email_index_to_users
/database/migrations/[timestamp]_add_index_to_users_email.php
class AddIndexToUsersEmail extends Migration
{
public function up()
{
Schema::table('users_email', function (Blueprint $table) {
$table->unique('email');
});
}
public function down()
{
Schema::table('users_email', function (Blueprint $table) {
$table->dropUnique('users_email_unique');
});
}
}
6.3 セキュアなパスワードを追加する
6.3.1 ハッシュ化されたパスワード
カラム追加
sail artisan make:migration add_password_to_users
/database/migrations/[timeatamp]_add_password_to_users.php
class AddPasswordToUsers extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('password')->after('email');
$table->rememberToken()->after('password');
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('password');
$table->dropRememberToken();
});
}
}
6.3.2 ユーザーがセキュアなパスワードを持っている
/app/Http/Controllers/UsersController.php
public function store(Request $request)
{
$request->validate([
"name" => "required|max:50",
"email" => "required|max:255|email|unique:users|email",
"password" => "required|confirmed",
]);
}
6.3.3 パスワードの最小文字数
/app/Models/User.php
public function store(Request $request)
{
$request->validate([
"name" => "required|max:50",
"email" => "required|max:255|email|unique:users|email",
"password" => "required|confirmed|min:6",
]);
}
6.3.4 ユーザーの作成と認証
tinkerでユーザを作成
User::create(["name" => "Michael Hartl", "email" => "mhartl@example.com", "password" => bcrypt("foobar")]);
6.4 最後に
参考