本文概述
- 创建模型的步骤
- 模型的结构
- 表名
- 主键
- 读取数据
- 读取有约束的数据
- 插入资料
- 使用save()方法更新数据
- 批量分配
- 用口才更新数据
- 删除资料
- 软删除/删除
- 检索已删除/已处理的数据
- 恢复已删除/已处理的数据
- 永久删除记录
在app目录中创建模型。你还可以将模型放置在任何位置, 可以根据composer.json文件自动加载模型。
我们可以使用以下命令来创建模型:
php artisan make:model发布
我们还可以通过使用数据库迁移来生成模型:
php artisan make:model发布-m
要么
php artisan make:model Post -migration
创建模型的步骤
- 当我们在Git bash窗口中输入上述命令时:
文章图片
上面的窗口显示名称为“ Post”的模型已成功创建。
- 在应用程序目录中创建模型(发布)。
文章图片
模型的结构 我们上面创建的模型类的结构如下所示:
<
?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 =’ 字符串’ ;
在上面, 我们将字符串类型分配给主键。
读取数据 现在, 我们将研究如何从数据库中检索数据。让我们通过一个例子来理解。
- 首先, 我们需要在模型类中添加两个属性。
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
//
protected $table='posts';
protected $primaryKey='id';
}
- 我们添加用于从数据库检索数据的路由。
<
?php
use App\Post;
Route::get('/read', function(){
$posts=Post::all();
foreach($posts as $post)
{
echo $post->
body;
echo ?<
br>
?;
}
});
在上面的代码中, 我们使用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属性, 如下面的代码所示。
<
?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来运行上面的代码。
文章图片
现在, 查看数据库。
文章图片
上面突出显示的区域表明已成功创建新记录。
用口才更新数据 现在, 我们将看到如何使用Eloquent的方法更新数据。让我们通过一个例子来理解。
- 首先, 创建路线。
Route::get('/update', function(){
Post::where('id', 1)->
update(['title'=>
'Charu', 'body'=>
'technical Content Writer']);
});
在上面的代码中, 我们使用模型类的update()方法。我们正在更新ID等于1的记录。
输出量
文章图片
文章图片
删除资料 现在, 我们将看到如何使用Eloquent删除数据。我们直接实现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属性设置为模型类。
<
?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列。
文章图片
- 当我们使用名称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。
文章图片
- 最后, 在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()函数还原被破坏的数据。
输出量
文章图片
文章图片
上面的屏幕显示出delete_at列的值为NULL, 这意味着该记录已还原到数据库中。
永久删除记录 有时我们需要永久删除数据。要永久删除软删除的模型, 我们使用forceDelete()方法。让我们通过一个例子来理解这一点。
Route::get('/forcedelete', function(){
Post::onlyTrashed()->
forceDelete();
});
在上面的代码中, 我们将删除已废弃的数据。
在执行上述代码之前, 已删除记录的ID等于以下屏幕快照中所示的1。
文章图片
【Laravel Eloquent使用详细实例】当我们运行上面的代码时, 已删除的记录将被删除, 该表将如下所示:
文章图片
推荐阅读
- Laravel中间件
- Laravel迁移
- Git安装详细步骤
- Laravel生成迁移
- Laravel表单
- Laravel文件上传
- Laravel CRUD操作全解
- Laravel数据库
- Laravel Blade模板