Laravel 模型用法与介绍
Laravel 是一个流行的 PHP 框架,其模型(Model)是 Eloquent ORM(对象关系映射)的核心部分,用于与数据库交互。模型提供了一种优雅的方式来定义数据库表的结构,并操作这些表中的数据。
1. 什么是 Laravel 模型?
- 定义:模型是数据库表的类表示,每个模型类对应数据库中的一张表。
- 作用:
- 简化数据库操作(CRUD:创建、读取、更新、删除)。
- 提供与数据库表字段对应的属性。
- 支持关系定义(如一对一、一对多、多对多)。
- 内置数据验证、事件、缓存等功能。
2. 如何创建模型?
(1)使用 Artisan 命令
Laravel 提供了 Artisan 命令来快速生成模型:
php artisan make:model ModelName
- 示例:
php artisan make:model User
这将生成一个
User
模型文件,位于app/Models
目录下。
(2)手动创建
你也可以手动创建模型文件,并继承 Illuminate\Database\Eloquent\Model
类。
3. 模型的基本结构
一个典型的模型文件如下:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use HasFactory;
// 指定表名(如果表名与模型名不一致)
protected $table = 'users';
// 允许批量赋值的字段
protected $fillable = ['name', 'email', 'password'];
// 隐藏敏感字段(如密码)
protected $hidden = ['password'];
}
4. 模型的核心功能
(1)数据查询
- 获取所有记录:
$users = User::all();
- 根据条件查询:
$user = User::where('email', 'example@example.com')->first();
- 获取单条记录:
$user = User::find(1); // 根据主键 ID 查询
(2)数据插入
- 创建记录:
$user = User::create([ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => bcrypt('password'), ]);
> 前提:
$fillable
属性中定义了允许批量赋值的字段。
(3)数据更新
- 更新记录:
$user = User::find(1); $user->name = 'Jane Doe'; $user->save();
(4)数据删除
- 删除记录:
$user = User::find(1); $user->delete();
5. 模型关系
Laravel 支持多种数据库关系,以下是常见的关系类型:
(1)一对一关系
- 定义:
class User extends Model { public function profile() { return $this->hasOne(Profile::class); } }
- 使用:
$profile = User::find(1)->profile;
(2)一对多关系
- 定义:
class User extends Model { public function posts() { return $this->hasMany(Post::class); } }
- 使用:
$posts = User::find(1)->posts;
(3)多对多关系
- 定义:
class User extends Model { public function roles() { return $this->belongsToMany(Role::class); } }
- 使用:
$roles = User::find(1)->roles;
6. 模型的其他功能
(1)数据验证
可以在模型中定义验证规则,结合表单请求或控制器使用。
(2)事件
模型支持事件(如 creating
、created
、updating
、deleted
等),可以在事件中执行特定逻辑。
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->created_at = now();
});
}
(3)软删除
通过 SoftDeletes
trait 实现软删除,记录不会从数据库中移除,而是标记为已删除。
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model
{
use SoftDeletes;
}
- 软删除记录:
$user->delete();
- 查询未删除的记录:
$users = User::whereNull('deleted_at')->get();
7. 实践
-
命名规范:
- 模型类名使用单数形式(如
User
)。 - 数据库表名使用复数形式(如
users
)。
- 模型类名使用单数形式(如
-
字段保护:
- 使用
$fillable
或$guarded
属性保护字段,防止批量赋值漏洞。
- 使用
-
关系定义:
- 在模型中定义关系,便于维护和扩展。
-
使用工厂和种子:
- 使用模型工厂(
Model Factory
)和数据库种子(Seeder
)生成测试数据。
- 使用模型工厂(
8. 示例:完整模型用法
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
protected $fillable = ['title', 'content', 'user_id'];
public function user()
{
return $this->belongsTo(User::class);
}
public function comments()
{
return $this->hasMany(Comment::class);
}
}
-
查询某用户的所有:
$posts = User::find(1)->posts;
-
创建:
$post = Post::create([ 'title' => 'Laravel Model Guide', 'content' => 'This is a guide to Laravel models.', 'user_id' => 1, ]);
Laravel 模型是操作数据库的核心工具,提供了简洁、优雅的语法来处理复杂的数据库操作。通过模型,开发者可以:
- 简化数据库交互。
- 定义表之间的关系。
- 利用事件、软删除等高级功能。
掌握模型的使用,是开发高效 Laravel 应用的关键!
(www.nzw6.com)