📜  Laravel雄辩

📅  最后修改于: 2021-01-05 10:51:29             🧑  作者: Mango

Laravel雄辩

在本主题中,我们将学习允许与数据库进行交互的雄辩模型。每个数据库表都有其对应的模型,该模型提供与数据库的交互。该模型允许您查询表中的数据。

在app目录中创建模型。您也可以将模型放置在任何地方,可以根据composer.json文件自动加载模型。

我们可以使用以下命令来创建模型:

php artisan make:model发布

我们还可以使用数据库迁移来生成模型:

php artisan make:model发布-m

要么

php artisan make:model Post -migration

创建模型的步骤

  • 当我们在Git bash窗口中输入上述命令时:

上面的窗口显示名称为“ Post ”的模型已成功创建。

  • 在应用程序目录中创建模型(发布)。

模型的结构

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

上面的代码显示Post类扩展了Illuminate \ Database \ Eloquent \ Model

表名

在laravel雄辩中,我们不需要指定要用于Post模型的表名。除非我们明确指定表的名称,否则该类的复数名称将被视为表名称。例如,在上面的代码中,该类的名称为Post,适用于表帖子。您还可以使用以下代码中显示的模型类的$ table属性指定自定义表:

在上面的代码中,$ table属性指定Post类正在使用posts表。

主键

雄辩的模型认为每个表都有一个名为' id '的主键。我们可以通过为$ primarykey属性提供一个不同的名称来覆盖此约定。

默认情况下,雄辩的主键是一个自动递增的整数值。如果要向主键提供非增量值,则必须将$ 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

body;
  echo ?
?; } });

在上面的代码中,我们使用all()方法从数据库中检索所有记录,然后应用foreach循环以检索数据库中所有可用行的主体名称,如下所示。

在下面的屏幕截图中,我们可以看到posts表中有两条记录。

输出量

当我们运行url / localhost / firstproject / public / read时,输出为:

如果要从数据库检索特定记录,则可以使用find()方法。

Route::get('/find',function(){
$posts=Post::find(2);
return $posts->title;
});

输出量

运行URL localhost / firstproject / public / find以查看以上代码的输出。

读取有约束的数据

  • 要检索单行,我们使用first()方法,如下所示:
Route::get('/find',function(){
$posts=Post::where('id',2)->first();
return $posts;
});

输出量

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

输出量

插入资料

现在,我们将看到如何在数据库中插入数据。让我们看下面的例子:

Route::get('/insert',function(){
$post=new Post;
$post->title='Nishka';
$post->body='QA Analyst';
$post->save();
});

输出量

在Web浏览器中运行url / localhost / firstproject / public / insert。执行完URL后,打开phpmyadmin。

以上输出显示数据已成功插入。

使用save()方法更新数据

我们还可以使用save()方法更新记录。让我们通过一个例子来理解。

Route::get('/basicupdate',function(){
$post=Post::find(2);
$post->title='Haseena';
$post->body='Graphic Designer';
$post->save();
});

输出量

上面的屏幕显示了数据库表,该表在执行上述代码之前。

当我们执行以上代码时,数据将更新,如下屏幕所示。

批量分配

要提供质量分配,我们需要使用create()方法,并在模型类中提供$ fillable属性。

让我们通过一个例子来理解。

  • 首先,创建路线,并在闭包函数添加了create()方法。 create()方法基本上是添加一条新记录,并通过其参数提供值。首先创建路由,然后在闭包函数添加create()方法。 create()方法基本上是在添加一条新记录,并且值是通过其参数提供的。
Route::get('/create',function(){
Post::create(['title'=>'Harshita','body'=>'Technical Content Writer']);
});
  • 为了提供质量分配,我们需要在模型类中添加$ fillable属性,如下面的代码所示。

输出量

运行URL localhost / firstproject / public / create来运行上面的代码。

现在,查看数据库。

上面突出显示的区域显示新记录已成功创建。

用口才更新数据

现在,我们将看到如何使用雄辩的方法更新数据。让我们通过一个例子来理解。

  • 首先,创建路线。
Route::get('/update',function(){
Post::where('id',1)->update(['title'=>'Charu','body'=>'technical Content Writer']);
});

在上面的代码中,我们使用模型类的update()方法。我们正在更新ID等于1的记录。

输出量


删除资料

现在,我们将看到如何使用Eloquent删除数据。我们直接实现雄辩的模型类中可用的delete()方法。

有多种删除数据的方法。

  • 第一种方法是使用find()和delete()方法。
Route::get('/delete',function(){
$post=Post::find(1);
$post->delete();
});

输出量


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

输出量


如果我们要销毁不止一排,

Route::get('/destroy',function(){
Post::destroy([3,4]);
});

上面的代码销毁了ID为3和4的记录。

输出量


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

输出量


软删除/删除

还有一种删除记录的方法是软删除。软删除模型后,这意味着实际上并未从数据库中删除记录。在软删除中,记录不会被永久删除;它们存储在垃圾空间中。

让我们通过一个如何完成软删除的示例来理解。

  • 首先,我们需要将delete_at属性设置为模型类。
  • 现在,进行迁移以在posts表中添加Deleted_at列。

  • 创建名称为add_column_deleted_at的迁移后,其结构如下所示:
softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->dropColumn('deleted_at');
        });
    }
}

laravel包含称为softDeletes()的帮助程序方法,我们在上面的代码中使用了该方法。 softDeletes()方法用于创建列。

  • 现在,运行命令php artisan migrate

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

在上面的代码中,我们正在软删除ID为'1'的记录。

输出量


在上面的屏幕中, deleted_at列显示该记录已被软删除的时间。如果此列包含空值,则表示该记录没有被软删除。

检索已删除/已处理的数据

要检索已删除的数据,我们使用withTrashed()方法。让我们通过一个例子来理解这一点。

Route::get('/readsofdelete',function(){
$post=Post::withTrashed()->where('id',1)->get();
return $post;
});

在上面,我们正在检索已删除或软删除的记录。

输出量

恢复已删除/已处理的数据

在上一个主题中,我们看到了如何从软删除的模型中检索数据。现在,我们将看到如何将数据从垃圾空间还原到原始位置。让我们通过一个例子来理解这一点。

Route::get('/restore',function(){
Post::withTrashed()->where('id',1)->restore();
});

在上面的代码中,我们正在使用restore()函数还原被破坏的数据。

输出量


上面的屏幕显示出Deleted_at列的值为NULL,这意味着该记录已还原到数据库中。

永久删除记录

有时我们需要永久删除数据。要永久删除软删除的模型,我们使用forceDelete()方法。让我们通过一个例子来理解这一点。

Route::get('/forcedelete',function(){
Post::onlyTrashed()->forceDelete();
});

在上面的代码中,我们将删除已废弃的数据。

在执行上述代码之前,已删除记录的ID等于以下屏幕快照中所示的1。

当我们运行上面的代码时,被删除的记录将被删除,该表将如下所示: