LoginSignup
0
0

More than 1 year has passed since last update.

Laravel で Ruby on Rails チュートリアル【6章】モデル

Last updated at Posted at 2020-11-14

環境

  • 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 最後に

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0