个性化阅读
专注于IT技术分析

Laravel Eloquent使用详细实例

本文概述

在本主题中, 我们将学习允许与数据库进行交互的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使用详细实例

模型的结构

我们上面创建的模型类的结构如下所示:

<?php

namespace 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属性提供一个不同的名称来覆盖此约定。

<?php

namespace 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创建迁移时, 其结构如下所示:
<?php

use 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使用详细实例

赞(0)
未经允许不得转载:srcmini » Laravel Eloquent使用详细实例

评论 抢沙发

评论前必须登录!