📅  最后修改于: 2021-01-05 10:51:29             🧑  作者: Mango
在本主题中,我们将学习允许与数据库进行交互的雄辩模型。每个数据库表都有其对应的模型,该模型提供与数据库的交互。该模型允许您查询表中的数据。
在app目录中创建模型。您也可以将模型放置在任何地方,可以根据composer.json文件自动加载模型。
我们可以使用以下命令来创建模型:
php artisan make:model发布
我们还可以使用数据库迁移来生成模型:
php artisan make:model发布-m
要么
php artisan make:model Post -migration
上面的窗口显示名称为“ 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以查看以上代码的输出。
Route::get('/find',function(){
$posts=Post::where('id',2)->first();
return $posts;
});
输出量
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()方法更新记录。让我们通过一个例子来理解。
Route::get('/basicupdate',function(){
$post=Post::find(2);
$post->title='Haseena';
$post->body='Graphic Designer';
$post->save();
});
输出量
上面的屏幕显示了数据库表,该表在执行上述代码之前。
当我们执行以上代码时,数据将更新,如下屏幕所示。
要提供质量分配,我们需要使用create()方法,并在模型类中提供$ fillable属性。
让我们通过一个例子来理解。
Route::get('/create',function(){
Post::create(['title'=>'Harshita','body'=>'Technical Content Writer']);
});
输出量
运行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()方法。
有多种删除数据的方法。
Route::get('/delete',function(){
$post=Post::find(1);
$post->delete();
});
输出量
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();
});
输出量
还有一种删除记录的方法是软删除。软删除模型后,这意味着实际上并未从数据库中删除记录。在软删除中,记录不会被永久删除;它们存储在垃圾空间中。
让我们通过一个如何完成软删除的示例来理解。
softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('posts', function (Blueprint $table) {
$table->dropColumn('deleted_at');
});
}
}
laravel包含称为softDeletes()的帮助程序方法,我们在上面的代码中使用了该方法。 softDeletes()方法用于创建列。
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。
当我们运行上面的代码时,被删除的记录将被删除,该表将如下所示: