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', ]; }
现在创建一个控制器来处理用户模型。创建控制器的命令如下 -
php artisan make:controller UserController
执行上述命令后的输出为 -
C:\xampp\htdocs\laraveltest>php artisan make:controller UserController Controller created successfully. C:\xampp\htdocs\laraveltest>
打开 UserController.php 文件并包含用户模型,如下所示 −
<?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 的主键值,即用户表的 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 )

