Laravel Eloquent 模型详解

Laravel 的 Eloquent ORM(对象关系映射)是 Laravel 框架中最强大的特性之一,它提供了一种简单而直观的方式来与数据库进行交互。

1. 基本概念
  • Eloquent 模型:Eloquent 模型是 PHP 类,每个模型类对应数据库中的一个表。通过 Eloquent 模型,你可以轻松地执行 CRUD(创建、读取、更新、删除)操作。
  • 表关联:Eloquent 支持多种表关联方式,如一对一、一对多、多对多等,使得复杂的数据关系管理变得简单。
  • 查询构建:Eloquent 提供了强大的查询构建器,可以轻松地构建复杂的查询。
2. 使用方法
2.1 创建模型

使用 Artisan 命令创建一个新的 Eloquent 模型:

php artisan make:model User

这将在 app/Models 目录下生成一个 User.php 文件。

// app/Models/User.php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    protected $fillable = [
        'name', 'email', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}
2.2 基本 CRUD 操作
  • 创建记录
$user = new User();
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->password = bcrypt('secret');
$user->save();
  • 读取记录
$user = User::find(1);
echo $user->name; // 输出: John Doe
  • 更新记录
$user = User::find(1);
$user->name = 'Jane Doe';
$user->save();
  • 删除记录
$user = User::find(1);
$user->delete();
2.3 查询构建
  • 获取所有记录
$users = User::all();
foreach ($users as $user) {
    echo $user->name;
}
  • 条件查询
$users = User::where('name', 'like', '%Doe%')->get();
foreach ($users as $user) {
    echo $user->name;
}
  • 分页查询
$users = User::paginate(10);
foreach ($users as $user) {
    echo $user->name;
}
2.4 表关联
  • 一对一关联
// app/Models/User.php
class User extends Authenticatable
{
    public function profile()
    {
        return $this->hasOne(Profile::class);
    }
}

// app/Models/Profile.php
class Profile extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
  • 一对多关联
// app/Models/User.php
class User extends Authenticatable
{
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

// app/Models/Post.php
class Post extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
  • 多对多关联
// app/Models/User.php
class User extends Authenticatable
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}

// app/Models/Role.php
class Role extends Model
{
    public function users()
    {
        return $this->belongsToMany(User::class);
    }
}
3. 使用场景
  • 数据操作:在需要对数据库进行 CRUD 操作时,使用 Eloquent 模型可以简化代码,提高开发效率。
  • 表关联:在处理复杂的数据关系时,使用 Eloquent 的表关联功能可以轻松管理多个表之间的关系。
  • 查询构建:在需要构建复杂查询时,使用 Eloquent 的查询构建器可以编写简洁、易读的查询代码。
  • 模型事件:在需要在数据操作前后执行某些逻辑时,可以使用 Eloquent 的模型事件(如 creatingcreatedupdatingupdated 等)。
4. 底层原理
  • 模型类:每个 Eloquent 模型类继承自 Illuminate\Database\Eloquent\Model 类,提供了许多有用的方法和属性。
  • 表映射:Eloquent 模型通过 $table 属性指定对应的数据库表,通过 $primaryKey 属性指定主键字段。
  • 属性填充:通过 $fillable 属性指定允许批量赋值的字段,通过 $guarded 属性指定不允许批量赋值的字段。
  • 查询构建:Eloquent 使用查询构建器(Query Builder)来构建 SQL 查询,提供了链式调用的方法,如 whereorderBypaginate 等。
  • 表关联:Eloquent 通过定义关联方法(如 hasOnehasManybelongsToMany 等)来管理表之间的关系。
  • 模型事件:Eloquent 提供了模型事件,可以在数据操作前后执行自定义逻辑,如 creatingcreatedupdatingupdated 等。

示例代码

创建和保存记录
use App\Models\User;

$user = new User();
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->password = bcrypt('secret');
$user->save();
查询记录
use App\Models\User;

$user = User::find(1);
echo $user->name; // 输出: John Doe
更新记录
use App\Models\User;

$user = User::find(1);
$user->name = 'Jane Doe';
$user->save();
删除记录
use App\Models\User;

$user = User::find(1);
$user->delete();
表关联
use App\Models\User;
use App\Models\Profile;

$user = User::find(1);
$profile = $user->profile; // 获取用户的个人资料

$profile = Profile::find(1);
$user = $profile->user; // 获取个人资料所属的用户

总结

  • 使用方法:通过创建模型类、执行 CRUD 操作、使用查询构建器和管理表关联,可以轻松地与数据库进行交互。
  • 使用场景:适用于数据操作、表关联管理、复杂查询构建和模型事件处理等场景。
  • 底层原理:Eloquent 模型通过继承 Model 类、使用查询构建器、管理表关联和触发模型事件,提供了强大的 ORM 功能。

通过 Eloquent 模型,你可以更高效地管理和操作数据库,提高开发效率和代码可读性。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐