[Day 23] 建立註冊的畫面及功能(七) - 資料庫的操作

建立註冊的畫面及功能(七) - 資料庫的操作

Laravel提供Eloquent ORM Model方便我們存取資料表的資料,
一個Eloquent ORM Model的檔案只能對應到一個資料表,
我們目前建立了users, mind, board三個資料表.

Laravel限制專案的檔案需要放在app/目錄底下,
不過底下的目錄結構沒有限制,
我們把所有的ORM Model都放在app/Entity目錄底下.
https://ithelp.ithome.com.tw/upload/images/20201001/20105694eQz5akEYwY.png

接下來我們新增ORM檔案,
app/Entity/User.php

<?PHP
namespace App\Entity;

use Illuminate\Database\Eloquent\Model;

class User extends Model {
    //資料表名稱
    protected $table = 'users';

    //主鍵名稱
    protected $promaryKey = 'id';

    //可變動欄位
    protected $fillable = [
        'name',
        'account',
        'password',
        'type',
        'sex',
        'height',
        'weight',
        'interest',
        'introduce',
        'picture',
        'enabled',
    ];
}
?>

檔案內容是根據我們之前建立的資料庫,
ORM檔案必須繼承Illuminate\Database\Eloquent\Model,
$table是檔案名稱,
$fillable是我們會去修改的欄位,
基本上id我們設定自動增加,
created_at跟updated_at這兩個欄位Laravel會自己處理,
其他的欄位都要寫進去,
否則即使有值也無法更新到資料庫.

接下來我們在app/Http/Controllers/UserAuthController底下的signUpProcess方法後面加入一行,

User::create($input);

透過Laravel的Model將資料新增到資料庫中,
當然前面要加上

use App\Entity\User;

signUpProcess方法的完整內容如下

//處理註冊資料
public function signUpProcess()
{
    //接收輸入資料
    $input = request()->all();

    //驗證規則
    $rules = [
        //暱稱
        'name' => [
            'required',
            'max:50',
        ],
        //帳號(E-mail)
        'account' => [
            'required',
            'max:50',
            'email',
        ],
        //密碼
        'password' => [
            'required',
            'min:5',
        ],
        //密碼驗證
        'password_confirm' => [
            'required',
            'same:password',
            'min:5'
        ],
    ];

    //驗證資料
    $validator = Validator::make($input, $rules);

    if($validator->fails())
    {
        //資料驗證錯誤
        return redirect('/user/auth/sign-up')
                    ->withErrors($validator)
                    ->withInput();
    }

    $input['password'] = Hash::make($input['password']);

    User::create($input);

    var_dump($input);
    exit;
}

我們再回到表單操作就能夠將資料寫到資料庫中了.
https://ithelp.ithome.com.tw/upload/images/20201001/20105694GOtOMcnpk6.png

這樣透過Laravel的Model我們存取資料庫就變得很容易了.

接下來我們再把另外兩個Model檔案也完成,
後面就可以直接拿來使用了.

app/Entity/Mind.php

<?PHP
namespace App\Entity;

use Illuminate\Database\Eloquent\Model;

class Mind extends Model {
    //資料表名稱
    protected $table = 'mind';

    //主鍵名稱
    protected $promaryKey = 'id';

    //可變動欄位
    protected $fillable = [
        'user_id',
        'content',
        'enabled',
    ];
}
?>

app/Entity/Board.php

<?PHP
namespace App\Entity;

use Illuminate\Database\Eloquent\Model;

class Board extends Model {
    //資料表名稱
    protected $table = 'board';

    //主鍵名稱
    protected $promaryKey = 'id';

    //可變動欄位
    protected $fillable = [
        'user_id',
        'email',
        'picture',
        'content',
        'enabled',
    ];
}
?>