iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
Software Development

跟著官方文件學習Laravel, 並實作出一個會員登入系統系列 第 11

Day11 跟著官方文件學習Laravel-利用Eloquent ORM改寫專案

laravel有提供我們ORM(object-relational mapper),讓我們可以利用Model來跟 DB做互動。
我們今天的目標就是利用Eloquent來改寫登入跟註冊。

首先我們要先創建一個User的Model,但預設laravel裡就有個User model所以我們先把它刪了。
接著輸入指令

php artisan make:model User

好了!創建好我們就可以使用囉

來改一下登入的寫法,我們可以在controller中另寫一個方法

class LoginController extends Controller
{
    public function login(Request $request){
        $account = $request->input('account');
        $password = $request->input('password');

        $user = DB::table('users')->where('account', '=', $account)
                                  ->first();
        if(Hash::check($password, $user->password)){
            return "你好,我的帳號是".$request->input('account');
        }
        return Redirect::back()->withErrors(['帳號或密碼錯誤']);
    }

    public function loginWithORM(Request $request){
        $account = $request->input('account');
        $password = $request->input('password');
        $user = User::query()
        ->where('account', $account)
        ->first();
        if(Hash::check($password, $user->password)){
            return "你好,我的帳號是".$user->account;
        }
        return Redirect::back()->withErrors(['帳號或密碼錯誤']);
    }
}

記得修改下route

Route::post('/login', [LoginController::class, 'loginWithORM']);

試試看可不可行,登入看看吧~我這邊可以
再來我們可以去改改註冊

public function handle()
    {
        $account = $this->argument('account');
        $password = $this->argument('password');
        $username = $this->argument('username');
        $validator = Validator::make(['password' => $password], [
            'password' => 'regex:' . SignUp::PASSWORD_REGEX
        ]);

        if ($validator->fails()) {
            $this->error("密碼需要6位數以上,並且至少包含大寫字母、小寫字母、數字、符號各一");
            return 1;
        }
        $user = User::where('account', $account)->first();
        // $user = DB::table('users')->where('account', $account)->first();
        if($user !== null){
            $this->error("帳號重複註冊");
            return 1;
        }
        User::create([
            'account' => $account,
                'password' => Hash::make($password),
                'name' => $username
        ]);
        // DB::table('users')->insert([
        //         'account' => $account,
        //         'password' => Hash::make($password),
        //         'name' => $username
        //     ]);
        $this->line("帳號註冊成功");
        return 0;
    }

但若你要可以在你的Model上create資料,必須加上這行

protected $guarded = [];

也試著再註冊一筆資料,並登入吧!

今天我們的實作成功!把登入跟註冊改以ORM實作了。期待明天的到來唷!


上一篇
Day10 跟著官方文件學習Laravel-Migration
下一篇
Day12 跟著官方文件學習Laravel-Session
系列文
跟著官方文件學習Laravel, 並實作出一個會員登入系統30

尚未有邦友留言

立即登入留言