製作模型

模型建立

模型類必須擴充套件 Illuminate\Database\Eloquent\Model。模型的預設位置是/app 目錄。

Artisan 命令可以輕鬆生成模型類 :

php artisan make:model [ModelName]

這將預設在 app/中建立一個新的 PHP 檔案,名為 [ModelName].php,並將包含新模型的所有樣板,其中包括基本設定所需的類,名稱空間和使用。

如果要與模型一起建立遷移檔案,請使用以下命令,其中 -m 還將生成遷移檔案:

php artisan make:model [ModelName] -m

除了建立模型之外,還會建立一個連線到模型的資料庫遷移。預設情況下,資料庫遷移 PHP 檔案位於 database/migrations/中。預設情況下,這不包括 id 和 created_at / updated_at 列以外的任何內容,因此你需要編輯該檔案以提供其他列。

請注意,你必須執行遷移(一旦設定了遷移檔案),以便模型從專案根目錄使用 php artisan migrate 開始工作

此外,如果你希望稍後在建立模型後新增遷移,則可以通過執行以下命令來執行此操作:

php artisan make:migration [migration name]

比如說你想為你的貓建立一個模型,你有兩個選擇,無論有沒有遷移就可以建立。如果你已經有貓表或者此時不想建立一個表,則可以選擇建立不遷移。

對於此示例,我們要建立遷移,因為我們還沒有表,因此將執行以下命令。

php artisan make:model Cat -m

此命令將建立兩個檔案:

  1. 在 App 資料夾中:app/Cat.php
  2. 在資料庫資料夾中:database/migrations/timestamp_creat_cats_table.php

我們感興趣的檔案是後者,因為正是這個檔案我們可以決定我們希望表格看起來像和包含什麼。對於任何預定義的遷移,我們都會獲得一個自動遞增的 id 列和一個時間戳列。

下面的遷移檔案摘錄示例包括上面的預定義列以及新增貓的名稱,年齡和顏色:

public function up()
    {
        Schema::create('cats', function (Blueprint $table) {

            $table->increments('id');    //Predefined ID
            $table->string('name');      //Name
            $table->integer('age');      //Age
            $table->string('colour');    //Colour
            $table->timestamps();        //Predefined Timestamps

        });
    }

因此,你可以看到為表建立模型和遷移相對容易。然後,要執行遷移並在資料庫中建立它,你將執行以下命令:

php artisan migrate

這會將任何未完成的遷移遷移到你的資料庫。

模型檔案位置

藉助 PSR4, 模型可以儲存在任何地方。

預設情況下,模型在 app 目錄中建立,名稱空間為 App。對於更復雜的應用程式,通常建議將模型儲存在對應用程式體系結構有意義的結構中的自己的資料夾中。

例如,如果你有一個使用一系列水果作為模型的應用程式,你可以建立一個名為 app/Fruits 的資料夾,並在此資料夾中建立 Banana.php(保持 StudlyCase 命名約定),然後你可以在 App\Fruits 名稱空間中建立 Banana 類:

namespace App\Fruits;

use Illuminate\Database\Eloquent\Model;

class Banana extends Model {
    // Implementation of "Banana" omitted
}

型號配置

Eloquent 遵循約定優於配置方法。通過擴充套件基礎 Model 類,所有模型都繼承下面列出的屬性。除非被覆蓋,否則以下預設值適用:

屬性 描述 預設
protected $connection 資料庫連線名稱 預設資料庫連線
protected $table 表名 預設情況下,類名轉換為 snake_case 並複數。例如,SpecialPerson 變成了 special_people
protected $primaryKey 表 PK id
public $incrementing 指示 ID 是否自動遞增 true
public $timestamps 指示模型是否應加時間戳 true
const CREATED_AT 建立時間戳列的名稱 created_at
const UPDATED_AT 修改時間戳列的名稱 updated_at
protected $dates 除了 timestamps 屬性之外,應該更改為 DateTime 的屬性 []
protected $dateFormat 將保留日期屬性的格式 當前 SQL 方言的預設值。
protected $with 與模型的 eagerload 的關係 []
protected $hidden 模型序列化中省略了屬性 []
protected $visible 模型序列化中允許的屬性 []
protected $appends 屬性訪問器新增到模型序列化 []
protected $fillable 可批量分配的屬性 []
protected $guarded 從質量分配中列入黑名單的屬性 [*](所有屬性)
protected $touches 儲存時應該觸及的關係 []
protected $perPage 分頁返回的模型數。 15

Version >= 5

屬性 描述 預設
protected $casts 應該轉換為本機型別的屬性 []