Laravel Eloquent使用详细实例

本文概述

  • 创建模型的步骤
  • 模型的结构
  • 表名
  • 主键
  • 读取数据
  • 读取有约束的数据
  • 插入资料
  • 使用save()方法更新数据
  • 批量分配
  • 用口才更新数据
  • 删除资料
  • 软删除/删除
  • 检索已删除/已处理的数据
  • 恢复已删除/已处理的数据
  • 永久删除记录
在本主题中, 我们将学习允许与数据库进行交互的Eloquent模型。每个数据库表都有其对应的模型, 该模型提供与数据库的交互。该模型允许你查询表中的数据。
在app目录中创建模型。你还可以将模型放置在任何位置, 可以根据composer.json文件自动加载模型。
我们可以使用以下命令来创建模型:
php artisan make:model发布
我们还可以通过使用数据库迁移来生成模型:
php artisan make:model发布-m
要么
php artisan make:model Post -migration
创建模型的步骤
  • 当我们在Git bash窗口中输入上述命令时:
Laravel Eloquent使用详细实例

文章图片
上面的窗口显示名称为“ Post”的模型已成功创建。
  • 在应用程序目录中创建模型(发布)。
Laravel Eloquent使用详细实例

文章图片
模型的结构 我们上面创建的模型类的结构如下所示:
< ?phpnamespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { // }

上面的代码显示Post类扩展了Illuminate \ Database \ Eloquent \ Model。
表名 在Laravel Eloquent中, 我们不需要指定要用于Post模型的表名。除非我们明确指定表的名称, 否则该类的复数名称将被视为表名称。例如, 在上面的代码中, 该类的名称为Post, 适用于表帖子。你还可以使用以下代码中显示的模型类的$ table属性指定自定义表:
< ?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { /** * The table associated with the model. * * @var string */ protected $table = ?posts'; }

在上面的代码中, $ table属性指定Post类正在使用posts表。
主键 Eloquent的模型认为每个表都有一个名为“ id”的主键。我们可以通过为$ primarykey属性提供一个不同的名称来覆盖此约定。
< ?phpnamespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * The primary key associated with the table. * * @var string */ protected $primaryKey = 'post_id'; }

默认情况下, Eloquent的主键是一个自动递增的整数值。如果要向主键提供非增量值, 则必须将$ incrementing属性设置为’ false’ 。
public $ incrementing = false;
如果要向主键提供非整数值, 则必须为$ keyType属性提供一个不同的值。
protected $ keyType =’ 字符串’ ;
在上面, 我们将字符串类型分配给主键。
读取数据 现在, 我们将研究如何从数据库中检索数据。让我们通过一个例子来理解。
  • 首先, 我们需要在模型类中添加两个属性。
Post.php
namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { // protected $table='posts'; protected $primaryKey='id'; }

  • 我们添加用于从数据库检索数据的路由。
web.php
< ?php use App\Post; Route::get('/read', function(){ $posts=Post::all(); foreach($posts as $post) { echo $post-> body; echo ?< br> ?; } });

在上面的代码中, 我们使用all()方法从数据库中检索所有记录, 然后应用foreach循环以检索数据库中所有可用行的主体名称, 如下所示。
在下面的屏幕截图中, 我们可以看到posts表中有两条记录。
Laravel Eloquent使用详细实例

文章图片
输出量
当我们运行URL localhost / firstproject / public / read时, 输出为:
Laravel Eloquent使用详细实例

文章图片
如果要从数据库检索特定记录, 则可以使用find()方法。
Route::get('/find', function(){ $posts=Post::find(2); return $posts-> title; });

输出量
运行URL localhost / firstproject / public / find以查看以上代码的输出。
Laravel Eloquent使用详细实例

文章图片
读取有约束的数据
  • 要检索单行, 我们使用first()方法, 如下所示:
Route::get('/find', function(){ $posts=Post::where('id', 2)-> first(); return $posts; });

输出量
Laravel Eloquent使用详细实例

文章图片
  • 如果不需要检索整个行, 则可以使用value()方法直接检索列的值。
Route::get('/find', function(){ $posts=Post::where('id', 1)-> value('title'); return $posts; });

输出量
Laravel Eloquent使用详细实例

文章图片
插入资料 现在, 我们将看到如何在数据库中插入数据。让我们看下面的例子:
Route::get('/insert', function(){ $post=new Post; $post-> title='Nishka'; $post-> body='QA Analyst'; $post-> save(); });

输出量
在Web浏览器中运行url / localhost / firstproject / public / insert。执行完URL后, 打开phpmyadmin。
Laravel Eloquent使用详细实例

文章图片
以上输出显示数据已成功插入。
使用save()方法更新数据 我们还可以使用save()方法更新记录。让我们通过一个例子来理解。
Route::get('/basicupdate', function(){ $post=Post::find(2); $post-> title='Haseena'; $post-> body='Graphic Designer'; $post-> save(); });

输出量
Laravel Eloquent使用详细实例

文章图片
上面的屏幕显示了数据库表, 该表在执行上述代码之前。
当我们执行上述代码时, 数据将更新, 如下屏幕所示。
Laravel Eloquent使用详细实例

文章图片
批量分配 为了提供质量分配, 我们需要使用create()方法, 并在模型类中提供$ fillable属性。
让我们通过一个例子来理解。
  • 首先, 创建路由, 并在闭包函数中添加了create()方法。 create()方法基本上是添加一条新记录, 并通过其参数提供值。首先, 创建路由, 然后在闭包函数中添加了create()方法。 create()方法基本上是添加一条新记录, 并且值是通过其参数提供的。
Route::get('/create', function(){ Post::create(['title'=> 'Harshita', 'body'=> 'Technical Content Writer']); });

  • 为了提供质量分配, 我们需要在模型类中添加$ fillable属性, 如下面的代码所示。
< ?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { // protected $table='posts'; protected $primaryKey='id'; protected $fillable= [ 'title', 'body' ]; }

输出量
运行URL localhost / firstproject / public / create来运行上面的代码。
Laravel Eloquent使用详细实例

文章图片
现在, 查看数据库。
Laravel Eloquent使用详细实例

文章图片
上面突出显示的区域表明已成功创建新记录。
用口才更新数据 现在, 我们将看到如何使用Eloquent的方法更新数据。让我们通过一个例子来理解。
  • 首先, 创建路线。
Route::get('/update', function(){ Post::where('id', 1)-> update(['title'=> 'Charu', 'body'=> 'technical Content Writer']); });

在上面的代码中, 我们使用模型类的update()方法。我们正在更新ID等于1的记录。
输出量
Laravel Eloquent使用详细实例

文章图片
Laravel Eloquent使用详细实例

文章图片
删除资料 现在, 我们将看到如何使用Eloquent删除数据。我们直接实现Eloquent的模型类中可用的delete()方法。
有多种删除数据的方法。
  • 第一种方法是使用find()和delete()方法。
Route::get('/delete', function(){ $post=Post::find(1); $post-> delete(); });

输出量
Laravel Eloquent使用详细实例

文章图片
Laravel Eloquent使用详细实例

文章图片
  • 第二种方法是使用destroy()方法。
Route::get('/destroy', function(){ Post::destroy(2); });

输出量
Laravel Eloquent使用详细实例

文章图片
Laravel Eloquent使用详细实例

文章图片
如果我们要销毁不止一排,
Route::get('/destroy', function(){ Post::destroy([3, 4]); });

上面的代码销毁了ID为3和4的记录。
输出量
Laravel Eloquent使用详细实例

文章图片
Laravel Eloquent使用详细实例

文章图片
  • 第三种方法是使用查询。
Route::get('/delete1', function(){ Post::where('id', 5)-> delete(); });

输出量
Laravel Eloquent使用详细实例

文章图片
Laravel Eloquent使用详细实例

文章图片
软删除/删除 删除记录的另一种方法是软删除。软删除模型后, 这意味着实际上并未从数据库中删除记录。在软删除中, 记录不会永久删除。它们存储在垃圾空间中。
让我们通过一个如何完成软删除的示例来理解。
  • 首先, 我们需要将delete_at属性设置为模型类。
< ?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Post extends Model { use SoftDeletes; protected $table='posts'; protected $primaryKey='id'; protected $dates=['deleted_at']; }

  • 现在, 进行迁移以在posts表中添加Deleted_at列。
Laravel Eloquent使用详细实例

文章图片
  • 当我们使用名称add_column_deleted_at创建迁移时, 其结构如下所示:
< ?phpuse Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AddColumnDeletedAt extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('posts', function (Blueprint $table) { $table-> softDeletes(); }); }/** * Reverse the migrations. * * @return void */ public function down() { Schema::table('posts', function (Blueprint $table) { $table-> dropColumn('deleted_at'); }); } }

laravel包含称为softDeletes()的帮助程序方法, 我们在上面的代码中使用了该方法。 softDeletes()方法用于创建列。
  • 现在, 运行命令php artisan migration。
Laravel Eloquent使用详细实例

文章图片
  • 最后, 在web.php文件中添加路由以运行软删除。
Route::get('/softdelete', function(){ Post::find(1)-> delete(); });

在上面的代码中, 我们正在软删除ID为’ 1’ 的记录。
输出量
Laravel Eloquent使用详细实例

文章图片
Laravel Eloquent使用详细实例

文章图片
在上面的屏幕中, deleted_at列显示该记录已被软删除的时间。如果此列包含空值, 则表示该记录未被软删除。
检索已删除/已处理的数据 要检索已删除的数据, 我们使用withTrashed()方法。让我们通过一个例子来理解这一点。
Route::get('/readsofdelete', function(){ $post=Post::withTrashed()-> where('id', 1)-> get(); return $post; });

在上面, 我们正在检索已删除或软删除的记录。
输出量
Laravel Eloquent使用详细实例

文章图片
恢复已删除/已处理的数据 在上一个主题中, 我们看到了如何从软删除的模型中检索数据。现在, 我们将看到如何将数据从垃圾空间还原到原始位置。让我们通过一个例子来理解这一点。
Route::get('/restore', function(){ Post::withTrashed()-> where('id', 1)-> restore(); });

在上面的代码中, 我们正在使用restore()函数还原被破坏的数据。
输出量
Laravel Eloquent使用详细实例

文章图片
Laravel Eloquent使用详细实例

文章图片
上面的屏幕显示出delete_at列的值为NULL, 这意味着该记录已还原到数据库中。
永久删除记录 有时我们需要永久删除数据。要永久删除软删除的模型, 我们使用forceDelete()方法。让我们通过一个例子来理解这一点。
Route::get('/forcedelete', function(){ Post::onlyTrashed()-> forceDelete(); });

在上面的代码中, 我们将删除已废弃的数据。
在执行上述代码之前, 已删除记录的ID等于以下屏幕快照中所示的1。
Laravel Eloquent使用详细实例

文章图片
【Laravel Eloquent使用详细实例】当我们运行上面的代码时, 已删除的记录将被删除, 该表将如下所示:
Laravel Eloquent使用详细实例

文章图片

    推荐阅读