模型檔案

_xie_發表於2020-12-02

前言

Laravel 為我們預設建立的模型檔案放置在 app 資料夾下,為了更好理解 MVC 模式的開發流程,統一使用 app/Models 資料夾來放置所有的模型檔案。現在讓我們先來建立一個 app/Models 資料夾,並將 預設為我們生成了使用者模型檔案User.php檔案放置到其中。

建立模型

$ php artisan make:model Models/up

如果需要在建立模型的同時順便建立資料庫遷移,則可以在後面使用 –migration 或 -m 選項

Eloquent 表命名約定

模型預設情況下會使用類的「下劃線命名法」與「複數形式名稱」來作為資料表的名稱生成規則。如:

  • Article 資料模型類對應 articles 表;
  • User 資料模型類對應 users 表;
  • BlogPost 資料模型類對應 blog_posts 表;

User.php預設模型檔案

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;
    /**
    *指明要進行資料庫互動的資料庫表名稱
    *
    * @var string
    */
    protected $table = 'users';

    /**
     * 防止批量賦值安全漏洞的欄位白名單
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * 當使用 $user->toArray() 或 $user->toJson() 時隱藏這些欄位
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * 指定模型屬性的資料型別
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

引用

  • Notifiable 訊息通知相關功能引用
  • Authenticatable 授權相關功能引用

屬性

table 指明要進行資料庫互動的資料庫表名稱,讓我們很方便的與資料庫進行互動
fillable 在過濾使用者提交的欄位,只有包含在該屬性中的欄位才能夠被正常更新
hidden 對使用者密碼或其它敏感資訊在使用者例項通過陣列或 JSON 顯示時進行隱藏
casts 指定欄位的型別

Tinker 程式設計環境

演示 - 建立使用者物件

在瞭解 Eloquent 模型的基本原理之後,接下來讓我們嘗試使用 Eloquent 模型來建立一個使用者物件,並將該使用者物件儲存到資料庫。雖然我們現在還沒有使用者登錄檔單,但是通過 Laravel 提供的 Tinker 環境可以讓我們完成對使用者物件建立。Tinker 是一個 REPL (read-eval-print-loop),REPL 指的是一個簡單的、可互動式的程式設計環境,通過執行使用者輸入的命令,並將執行結果直接列印到命令列介面上來完成整個操作。REPL 對於學習一門新的程式語言具有很大的幫助,因為它能立刻對初學者做出的動作進行響應。接下來我們將使用 Tinker 來操作使用者物件。
首先讓我們使用此命令進入 Tinker 環境:

$ php artisan tinker

通過下面命令我們可以很輕鬆的建立一個使用者物件:

 >>> App\Models\User::create(['name'=> 'xie', 'email'=>'1194832688@qq.com','password'=>bcrypt('password')])

注意:這裡我們又多了一種命令列提示符 - >>> , 代表著 artisan tinker 命令列環境。

查詢

使用 use 來引用 App\Models\User Eloquent 模型類

方便不用寫那麼長了,就像下面的方式

>> use App\Models\User

查詢一個 id 為 1 的使用者,使用以下方法:

>>> User::find(1)

當你傳給 find 方法的 id 不存在時,Tinker 將會返回 null:

>>> User::find(5)

如果你想在查詢使用者不存在時觸發報錯的話,可使用 findOrFail:

>>> User::findOrFail(5)

如果要查詢使用者表中的首個使用者,可以使用 first 方法:

>>> User::first()

我們還可以用 all 方法取出所有的使用者資料:

>>> User::all()

更新

在使用者建立成功之後,我們還可以對使用者資訊進行更新。有兩種方式可以完成使用者的更新操作:

  • 第一種是通過給使用者物件屬性進行賦值,賦值成功後再呼叫 save 方法進行儲存更新;
  • 第二種則是直接呼叫 update 方法進行更新;

    一般較為常用的是第二種更新方式。

首先,讓我們將使用者物件從資料庫中取出,並賦值給 user 變數。

>>> $user = User::first()

save 方法更新

使用者名稱進行更新,將其名字更改為 josh

>>> $user->name = 'josh'

讓我們來呼叫 save 方法對使用者資訊進行儲存

>>> $user->save()

update 方法更新

下面讓我們再來使用 update 方法將使用者名稱更改回 xie:

>>> $user = user::first()
>>> $user->update(['name'=>'xie'])

至此模型大概就這樣玩啦

tinker 程式設計環境總結

  • 一開始我以為使用模型與資料庫互動是必須要引用上面那些,但是我刪除這些引用,一樣可以操作
  • 一開始我以為只能使用這個user模型進行操作,不會這麼傻吧,然後就認識到錯誤

    1.你新加的模型要有上面的 屬性,不然會報錯,這個錯誤是注入錯誤,fillable新增白名單

    2.新增資料的時候它會自動新增二個欄位 updated_at 與 created_at

本作品採用《CC 協議》,轉載必須註明作者和本文連結
~邪~

相關文章