Laravel开发:如何使用Laravel Eloquent构建数据库模型?

2023年 8月 5日 50.7k 0

Laravel开发:如何使用Laravel Eloquent构建数据库模型?

Laravel是一款广受欢迎的PHP框架,其提供了强大且易于使用的数据库操作工具——Laravel Eloquent。在过去,要使用PHP进行数据库操作难免要写大量冗长的SQL语句和繁琐的代码,而使用Laravel Eloquent则能够轻松地构建数据库模型,实现快速开发和维护。本文将介绍如何使用Laravel Eloquent构建数据库模型。

一、创建数据库表

首先,需要通过数据库迁移(Migration)创建数据库表。在Laravel中,可以使用命令行工具artisan来实现此过程。在命令行中输入:

php artisan make:migration create_users_table

登录后复制

该命令会在app/database/migrations目录下创建一个迁移文件,文件名称为当前日期和时间加上迁移的名称,例如2019_08_17_000000_create_users_table.php。修改迁移文件,编写对应的数据库结构。

Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});

登录后复制

以上代码创建了一个名为users的表,其中包含了id、name、email、email_verified_at、password、remember_token、created_at和updated_at共8个字段。接下来,运行迁移文件,创建数据库表。

php artisan migrate

登录后复制

二、创建模型

在应用中创建模型(Model)是使用Laravel Eloquent的第一步。可以通过artisan工具来创建一个模型:

php artisan make:model User

登录后复制

上面的命令将在app目录下创建一个名为User的模型,该模型对应着数据库中的users表。默认情况下,Laravel Eloquent假定数据库表名是模型名称的复数形式,如果需要对应的是不同的表名或使用不同的数据库连接,可以在模型中定义属性$table和$connection。

模型的定义如下:

namespace App;

use IlluminateDatabaseEloquentModel;

class User extends Model
{
//
}

登录后复制

三、模型属性

在模型中,Laravel Eloquent已定义了一些默认属性和方法,其中包括:

  • $fillable属性:定义可以被批量赋值的属性,以防止注入攻击。可以从创建/更新的请求中使用create()和update()方法进行填充。
  • protected $fillable = [
    'name', 'email', 'password',
    ];

    登录后复制

  • $hidden属性:定义应在数组中隐藏的属性。当进行序列化操作时,这些属性将被隐藏。
  • protected $hidden = [
    'password', 'remember_token',
    ];

    登录后复制

  • $casts属性:定义属性应被转化为原生类型(整型、布尔型、浮点型等)或自定义的对象。
  • protected $casts = [
    'email_verified_at' => 'datetime',
    ];

    登录后复制

    四、模型方法

    Laravel Eloquent提供了一些方法,以便在模型中进行数据操作。以下是一些最常见的模型方法:

  • where():用于添加WHERE条件。
  • $user = User::where('name', 'John')->first();

    登录后复制登录后复制

  • find():用于通过模型的主键ID查找记录。
  • $user_id = 1;
    $user = User::find($user_id);

    登录后复制

  • first():返回第一个查找到的记录。
  • $user = User::where('name', 'John')->first();

    登录后复制登录后复制

  • get():返回查找到的所有记录。
  • $users = User::all();

    登录后复制

  • create():用于创建一条新的数据记录。
  • User::create(['name' => 'Taylor', 'email' => 'taylor@example.com', 'password' => 'password']);

    登录后复制

  • update():用于更新记录。
  • $user = User::find($user_id);
    $user->name = 'Updated Name';
    $user->save();

    登录后复制

  • delete():用于删除记录。
  • $user = User::find($user_id);
    $user->delete();

    登录后复制

    以上是一些基本的Laravel Eloquent模型方法,可以快速的实现对数据库的增、删、改、查操作。

    五、关联关系

    Laravel Eloquent还提供了一种便捷的方式来定义各种关联性:一对一(One to One)、一对多(One to Many)、多对多(Many to Many)和多态关联(Polymorphic Relations)。以下是一些例子:

  • 一对一(One to One)
  • 在一对一的关联关系中,每个模型实例只与另一个相关模型实例相关联。例如,在users表中的每行数据都可能与一个phone表中的行相关联,phone表存储了用户的电话号码。在User模型中,定义一个phone()方法,表示该模型与phone模型之间的一对一关系。

    class User extends Model
    {
    public function phone()
    {
    return $this->hasOne('AppPhone');
    }
    }

    登录后复制

    在Phone模型中,定义相反的hasOne()方法。

    class Phone extends Model
    {
    public function user()
    {
    return $this->belongsTo('AppUser');
    }
    }

    登录后复制

  • 一对多(One to Many)
  • 在一对多的关联关系中,一个模型实例与另一个模型实例相关联,而另一个实例可以关联多个模型实例。例如,在一个论坛网站中,每个模板可能与许多评论相关联。在Thread模型中,定义一个comments()方法,表示该模型与Comment模型之间的一对多关系。

    class Thread extends Model
    {
    public function comments()
    {
    return $this->hasMany('AppComment');
    }
    }

    登录后复制

    在Comment模型中,定义相反的belongsTo()方法。

    class Comment extends Model
    {
    public function thread()
    {
    return $this->belongsTo('AppThread');
    }
    }

    登录后复制

  • 多对多(Many to Many)
  • 在多对多的关联关系中,该模型实例与许多其他模型实例相关联,而每个相关的模型实例也可以与多个模型实例关联。例如,在一个博客中,每篇文章可能有多个分类标签,每个标签也可能有多篇文章。在Post模型中,定义一个tags()方法,表示该模型与Tag模型之间的多对多关系。

    class Post extends Model
    {
    public function tags()
    {
    return $this->belongsToMany('AppTag');
    }
    }

    登录后复制

    在Tag模型中,定义相反的belongsToMany()方法。

    class Tag extends Model
    {
    public function posts()
    {
    return $this->belongsToMany('AppPost');
    }
    }

    登录后复制

  • 多态关联(Polymorphic Relations)
  • 多态关联允许模型通过多个中介模型与其他模型进行多对多关联。例如,在应用中可以使用comments模型对其他类型的模型进行评论。在Comment模型中,定义一个commentable()方法,表示该模型与所有支持评论的模型之间的多态关系。

    class Comment extends Model
    {
    public function commentable()
    {
    return $this->morphTo();
    }
    }

    登录后复制

    在支持评论的模型中,例如Post和Video模型中,定义morphMany()方法。

    class Post extends Model
    {
    public function comments()
    {
    return $this->morphMany('AppComment', 'commentable');
    }
    }

    class Video extends Model
    {
    public function comments()
    {
    return $this->morphMany('AppComment', 'commentable');
    }
    }

    登录后复制

    以上是Laravel Eloquent提供的关联关系,可以让开发者在数据库模型中轻松处理复杂的关系结构。

    七、总结

    本文介绍了使用Laravel Eloquent构建数据库模型的基础知识,包括创建数据库表、创建模型、模型属性和方法,以及关联关系。Laravel Eloquent提供了一种简单和直观的方式来操作数据库,使得开发者能够快速构建应用程序,并为复杂的数据库结构提供了更干净、易于维护的解决方案。希望这篇文章对你的学习和开发有所帮助。

    以上就是Laravel开发:如何使用Laravel Eloquent构建数据库模型?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论