Laravel Eloquent 模型屬性如何對映到資料庫表?


Eloquent 是一個新的物件關係對映器 (ORM),它有助於與資料庫互動。使用 Eloquent,每個表都有一個對映模型來處理該表上的所有操作。

Laravel 中的模型代表資料庫中的表。例如,如果您有表 customers,則模型名稱將為 customer;對於 users,則為 user;對於 employees,則為 employee。表名必須是複數,模型名必須是單數。這是一個遵循的模式,但這並不會阻止您使用您選擇的表名和模型名的命名約定。

在開始使用模型之前,請確保已連線到資料庫。資料庫配置位於 config/database.php 中。此外,.env 檔案包含資料庫連線的詳細資訊。

在此示例中,我們將使用 mysql 資料庫,因此在 .env 檔案中,我們具有以下環境變數及其值。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=

在 config/database.php 中,使用了上述環境變數 –

'mysql' => [
   'driver' => 'mysql',
   'url' => env('DATABASE_URL'),
   'host' => env('DB_HOST', '127.0.0.1'),
   'port' => env('DB_PORT', '3306'),
   'database' => env('DB_DATABASE', 'forge'),
   'username' => env('DB_USERNAME', 'forge'),
   'password' => env('DB_PASSWORD', ''),
   'unix_socket' => env('DB_SOCKET', ''),
   'charset' => 'utf8mb4',
   'collation' => 'utf8mb4_unicode_ci',
   'prefix' => '',
   'prefix_indexes' => true,
   'strict' => true,
   'engine' => null,
   'options' => extension_loaded('pdo_mysql') ? array_filter([
      PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
   ]) : [],
],

我們首先使用以下命令建立一個模型:

php artisan make:model User

命令的輸出是:

C:\xampp\htdocs\laraveltest>php artisan make:model User
Model created successfully.
C:\xampp\htdocs\laraveltest>

執行命令後,您將在 app/Models/User.php 中獲得模型檔案。

<?php namespace App\Models; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable{ use HasApiTokens, HasFactory, Notifiable; /** * The attributes that are mass assignable. * * @var array<int, string> */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for serialization. * * @var array<int, string> */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast. * * @var array<string, string> */ protected $casts = [ 'email_verified_at' => 'datetime', ]; }

現在建立一個控制器來使用 User 模型。建立控制器的命令如下:

php artisan make:controller UserController

執行上述命令後的輸出是:

C:\xampp\htdocs\laraveltest>php artisan make:controller UserController
Controller created successfully.
C:\xampp\htdocs\laraveltest>

開啟 UserController.php 檔案,幷包含 User 模型,如下所示:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class UserController extends Controller{ // }

現在首先在 routes/web.php 中新增一條路由,如下所示:

use App\Http\Controllers\UserController;
Route::get('users', [UserController::class, 'index']);

在您的 UserController.php 中新增一個方法 index(),我們可以在其中查詢表。現在,要獲取對映到表的模型屬性,您可以使用表中的資料獲取列名。

示例 1

在此示例中,我們使用 User::find(1),這裡 1 是傳遞給 find 的主鍵值,即 users 表的 id。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class UserController extends Controller{ public function index() { $user = User::find(1); print_r($user->getAttributes()); } }

輸出

輸出將為您提供表屬性的詳細資訊以及 id:1 的資料。

Array(
   [id] => 1
   [name] => 3qULmjwzo1
   [email] => zt6EovRjV7@gmail.com
   [email_verified_at] =>
   [password] => yhka61wZeS
   [remember_token] =>
   [created_at] =>
   [updated_at] =>
)

示例 2

現在,如果表中沒有資料,您可以嘗試以下示例來獲取表屬性:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class UserController extends Controller{ public function index() { $user = User::first(); $table_columns = array_keys(json_decode($user, true)); print_r($table_columns); } }

輸出

上述程式碼的輸出是:

Array(
   [0] => id
   [1] => name
   [2] => email
   [3] => email_verified_at
   [4] => created_at
   [5] => updated_at
)

更新於:2022年8月30日

3K+ 次瀏覽

啟動您的 職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.