模型的作用:
就是一个快速操作数据库(准确的说是对应的数据表,一个模型对应一个数据表)的方法,可以利用模型加上一些自己想要的操作对数据表进行快速操作。如查找特定的记录,增删查改都可。
模型的定义:
利用命令行快速创建一个模型:
php artisan make:model Post
这样会创建在根目录下的app下的model中:
模型对应的表名:默认是表名为下划线格式+复数(也可以利用覆盖方法修改这个格式)
Eloquent 约定模型类映射表名是将类名由驼峰格式转化为小写+下划线(含多个单词的话),最后将其转化为复数形式,比如 Post 对应表名是 posts、PostTag 对应表名是 post_tags 等等。当然,如果你不想遵循这个系统约定的规则,也可以通过手动设置模型类属性的方式进行自定义,例如:
protected $table = ‘articles’;
模型除了表名的默认操作外还有其他默认定义:
【以下的PHP语句都是写在模型类中的】
1、 默认数据表有一个自增型的id(int型)
可以通过类似语句修改id(列)的名称:
protected $primaryKey = ‘post_id’;
如果主键不是自增的,还可以设置 $incrementing 属性为 false:
public $incrementing = false;
如果主键不是整型,还可以设置 $keyType 属性为 string:
protected $keyType = 'string';
2、 默认数据表都有两个时间戳:
created_at 和 updated_at 字段(迁移类中 $table->timestamps() 会生成这两个字段),并且在保存模型类时会自动维护这两个字段。如果你的数据表里面不包含这两个字段,或者只包含一个,都需要设置 $timestamps 属性为 false:
public $timestamps = false;
或者通过 CREATED_AT 和 UPDATED_AT 常量来设置自定义的创建和更新时间字段:
public const CREATED_AT = 'create_time';
public const UPDATED_AT = 'update_time';
3、 默认的时间戳格式是Y-m-d H:i:s想要修改的话可以利用以下语句:
protected $dateFormat = ‘U’;
4、 默认的数据库连接是配置中的默认连接如果想要修改的话可以利用以下的语句:
protected $connection = 'connection_name';
下面介绍利用模型进行增删查改的功能:
一、 查询
利用以下语句可以得到所有的记录:
$posts = Post::all();
该方法返回的是集合,只不过是模型类集合:
要获取指定模型类的字段属性,遍历该集合即可:
foreach ($posts as $post) {
dump($post->title);
}
获取指定查询结果
如果想要指定查询条件和查询字段,可以通过 where 方法和 select 方法来实现:
$posts = Post::where(‘views’, ‘>’, 0)->select(‘id’, ‘title’,
‘content’)->get();
因为是查询构建器,所以我们还可以在模型查询操作中对查询结果进行排序和分页:
$posts = Post::where('views', '>', 0)->orderBy('id', 'desc')->offset(10)->limit(5)->get();
获取单条记录
当然,你也可以通过查询构建器的方式在模型类查询中获取单条记录:
$user = User::where('name', '我是谁')->first();
二、 插入数据
利用如下语句插入数据:
$post = new App\Post;
$post->title = '测试文章标题';
$post->content = '测试文章内容';
$post->user_id = 1;
$post->save();
Eloquent 还为我们提供了一些快捷的插入方法,比如 firstOrCreate 和 firstOrNew,这两个方法都会先尝试通过指定查询条件在数据库中查找对应记录,如果没有找到的话,会创建对应模型类的实例,并将查询条件作为对应字段值设置到模型属性上
三、 更新数据
$post = Post::find(31);
$post->title = '测试文章标题更新';
$post->save();
Eloquent 也为我们提供了快捷的更新方法 updateOrCreate,该方法首先会根据传入参数对模型对应记录进行更新,如果发现对应记录不存在,则会将更新数据作为初始数据插入数据库,并保存(同样也不建议这么做,除非你的场景特别适合):
$user = user::updateOrCreate(
['name' => '我是谁'],
['email' => 'admin@adsfasdfy.org']
);
有的时候我们可能需要批量更新模型对应数据表的多条记录,这可以借助查询构建器来实现:
Post::where('views', '>', 0)->update(['views' => 100]);
四、 删除数据
删除数据记录语句实例如下:
$post = Post::find(31);
$post->delete();
destroy 方法一次删除多条记录,通过数组传递多个主键 ID 即可:Post::destroy([1,2,3]);
当然,也可以通过查询构建器的方式删除指定记录:
$user = User::where('name', '我是谁')->fisrt();
$user->delete();