主题
Laravel Eloquent
在上两节内容我们通过 migration 创建了个人资料的数据表 profiles,并且使用 数据填充 seed 进行了数据初始化。那么如何来操作数据表的数据呢?例如新增数据,更新删除等等操作。这时候就轮到 Laravel 中最为强大的组件 Eloqument (俗称 ORM, Object Relational Mapper) 出场了。在 Laravel 中,通常称操作数据库的类叫模型 Model。通过模型来操作对应的数据表,你可以认为模型就是数据表 PHP 代码的抽象。数据库每一张数据表对应 Laravel 项目中的一个模型
创建模型
Laravel 提供了非常便捷的命令来创建模型,来使用下面的命令
php
php artisan make:model Profile执行该命令之后,将会在 app\Models 目录下创建一个 Profile.php 文件,内容如下
INFO
这里有个小技巧,例如现在个人信息表名叫 profiles,那么对应的模型名称就是 Profile,所以 Profile 模型不需要设置表名
php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// 每个模型都需要继承 Eloquent Model
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
// 当然也可以显性设置表名
protected $table = 'profiles';
use HasFactory;
}模型创建成功之后,我们在回到 ProfileController 控制器中的 index 方法。原来我们的数据都是使用数组写死的,现在我们使用模型从数据库中获取数据
php
// ProfileControlelr index 方法
public function index(\App\Models\Profile $profile)
{
return view('profile.index',[
'profiles' => $profile->all() // all() 方法可以查询所有 profile 信息
]);
}回到浏览器,访问 /profile 路由,你会看到
已经将数据库里面的数据全部渲染出来了,然后再回到 ProfileController 控制器中的 detail 方法,修改成下面的代码
php
public function detail($id, \App\Models\Profile $profile)
{
return view('profile.detail',[
'profile' => $profile->find($id) // find($id) 可以根据 ID 查询某个 profile 信息
]);
}然后回到 /profile 页面,点击详情,你将会看到下面的页面,注意地址栏的 /profile/{id} 的 ID 的变化

稍微深入
所谓模型(Model),我个人的理解模型即是对关系型数据库表的抽象。例如 Profile 模型。当你使用下面的代码查询出对应的个人信息时
php
$profile = Profile::find(1);实际上对应的即是 profiles 表中 ID=1 的一条记录,这条记录抽象成了 Profile 模型对象。所以当你想获取表数据的时候,只需要操作模型对象,例如获取个人信息的中姓名数据
php
dd($profile->name)如上,我们从模型中是查询出了单条记录,但是如果是多条记录呢?例如下面的代码,查询所有个人信息
php
$profiles = Profile::all();这将会返回一组 profile 的数据,但并不是数组,而是 Laravel 框架中的 Collection 集合对象,集合在后面讲,这里你只需要记住,集合就是 PHP 数组的对象操作就可以了。例如集合通过 each 方法回调即可迭代每个 Profile 模型
php
$profiles->each(function($profile){
echo $profile->name;
})