黑马lavarel教程---5、模型操作(AR模式)

摘要:
黑马lavarel教程---5、模型操作一、总结一句话总结:AR:ActiveRecord:ActiveRecord,是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。美观、简单的与数据库打交道:EloquentORM提供了一个的与数据库打交道的ActiveRecord实现,每张数据表都对应一个与该表进行交互的“Model模型”,模型允许你在表中进行数据查询,以及插入、更新、删除等操作。
黑马lavarel教程---5、模型操作(AR模式)

一、总结

一句话总结:

AR: ActiveRecord :Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。

1、Eloquent ORM:用模型操作数据库?

ORM是对象关系模型
eloquent:英 ['eləkwənt]:adj. 意味深长的

英 ['eləkwənt] 美 ['ɛləkwənt]
adj. 意味深长的;雄辩的,有口才的;有说服力的;动人的
[ 比较级 more eloquent 最高级 most eloquent ]

2、Laravel 自带的 Eloquent ORM 介绍?

美观、简单的与数据库打交道:Eloquent ORM 提供了一个【美观、简单】的与数据库打交道的 ActiveRecord 实现,每张数据表都对应一个与该表进行交互的“Model模型”,模型允许你在表中进行数据查询,以及插入、更新、删除等操作。

3、AR模式三个核心(映射)?

1、每个【数据表】:与数据表进行交互的Model【模型】映射(实例化模型)
2、记录中的【字段】:与模型类的【属性】映射(给属性赋值)
3、表中的每个【记录】:与一个完整的请求实例映射(具体的CURD操作)

4、定义模型注意事项?

第一:(必做)定义一个$table属性,值是不要前缀的表名,如果不指定则使用类名的复数形式作为表名。如果模型为Member模型在不指定table属性的情况下,其默认会去找members表。修饰词:protected
第二:(可选)定义$primaryKey属性,值是主键名称,如果需要使AR模式的find方法,则可能需要指定主键(Model::find(n)),在主键字段不是id的时候则需要指定主键。修饰词:protected
第三: (可选)定义$timestamps属性,值是false,如果不设置为false,则默认会操作表中的created_at和updated_at字段,我们表中一般没有这两个字段,所以设置为false,表示不要操作这两个字段。修饰词:public
第四:(可选)定义$fillable属性,表示使用模型插入数据时,允许插入到数据库的字段信息。修饰词:protected
class Member extendsModel{
    //定义模型关联的数据表(一个模型只操作一个表)
    protected $table='member'//定义主键(可选)
    protected $primaryKey=‘id';
    //定义禁止操作时间
    public $timestamps=false;
    //设置允许写入的数据字段
    protected $fillable=['id','name','age','email];
}

5、模型定义时候的$fillable字段和$guarded字段的关系:protected $fillable=['id','name','age','email];?

相反:$fillable允许入库的字段,使用$guarded是设置排除入库的字段

6、使用模型中create插入数据时需要注意什么:比如向数据表中添加数据:$result=$model->create($request->all());?

要设置$fillable允许入库的字段,使用$guarded是设置排除入库的字段

7、模型的使用:模型在控制器中的使用方式有2种?

①直接像使用DB门面一样的操作方式:以调用静态方法为主的形式,该形式下模型不需要实例化,例如:Member::get() 等价于 DB::table(‘member’) -> get();
②实例化模型然后再去使用模型类(普通):例如:$model = new Member();$model -> get();

8、Member::get() 和 DB::table(‘member’) -> get()的关系?

等价于:Member::get() 等价于 DB::table(‘member’) -> get();

9、AR模式三个核心映射 实例?

1、$member = new Member(); //映射关系1:将表映射到模型
2、$member-> name = value; //映射关系2:将字段映射到属性
3、$member -> save(); //映射关系3:将记录映射到实例
每个【数据表】:与数据表进行交互的Model【模型】映射(实例化模型)
记录中的【字段】:与模型类的【属性】映射(给属性赋值)
表中的每个【记录】:与一个完整的请求实例映射(具体的CURD操作)
注意:在laravel里面添加数据的时候,需要先实例化模型,然后为模型设置属性,最后调用save方法即可。
$member = new Member();    //映射关系1:将表映射到模型
$member-> name = value;    //映射关系2:将字段映射到属性,属性名和字段名一致
$member -> age =value;
…
$member -> save();        //映射关系3:将记录映射到实例

10、模型增加数据操作两种方法?

1、使用AR模式:$member = new Member(); $member-> name = value; $member -> save();
2、Member::create($request->all())

11、Member::all() 和 Member::get()的区别(都查询多行并且指定字段) ?

all不支持连接其他的辅助查询方法:Member::where('id','>',2)->all([' 列 1',' 列 2']); 会报错

12、在laravel里面使用ORM模型方式更新数据需要怎么做?

麻烦:两次操作数据库:需要先调用模型的find方法获取对应的记录,返回一个模型对象,然后为该模型对象设置要更新的数据(对象的属性),最后调用save方法即可。
$user = User::find($id); 
$user->title = $_POST['title']; 
$user->content= $_POST['content'];
return $user->save() ? 'OK' : 'fail';

13、在laravel里面使用ORM模型方式更新数据时,save并没有指定操作的是哪条记录,为什么save可以准确操作?

|||-begin

$user = User::find($id); 
$user->title = $_POST['title']; 
$user->content= $_POST['content'];
return $user->save() ? 'OK' : 'fail';

|||-end

模型调用对象一般是单例模式,所以前面User::find($id)的时候模型就是指定的这条数据,所以save的时候更新的也就是这条数据

14、模型使用update方式更新?

$result=Member::where('id','7')->update(['age'=>82']);

二、模型操作(AR模式)

Laravel 自带的 Eloquent ORM 提供了一个美观、简单的与数据库打交道的 ActiveRecord 实现,每张数据表都对应一个与该表进行交互的“Model模型”,模型允许你在表中进行数据查询,以及插入、更新、删除等操作。

AR模式三个核心(映射):

每个数据表 与数据表进行交互的Model模型映射(实例化模型)

记录中的字段 与模型类的属性映射(给属性赋值)

表中的每个记录 与一个完整的请求实例映射(具体的CURD操作)

1、定义模型

(1)定义位置

定义模型的位置,默认是在app目录下面,但是为了管理方便,建议分目录进行创建:

黑马lavarel教程---5、模型操作(AR模式)第1张

(2)命名规则

本身laravel对模型的命名没有严格的要求,一般采用 表名(首字母大写).php

比如:Member.php User.php Goods.php

(3)创建模型

可以使用artisan命令;

[project] > php artisan make:model Home/Member

黑马lavarel教程---5、模型操作(AR模式)第2张

创建好的初始代码:

黑马lavarel教程---5、模型操作(AR模式)第3张

(4)定义模型注意事项(重点)

第一:(必做)定义一个$table属性,值是不要前缀的表名,如果不指定则使用类名的复数形式作为表名。如果模型为Member模型在不指定table属性的情况下,其默认会去找members表。修饰词:protected

第二:(可选)定义$primaryKey属性,值是主键名称,如果需要使AR模式的find方法,则可能需要指定主键(Model::find(n)),在主键字段不是id的时候则需要指定主键。修饰词:protected

第三: (可选)定义$timestamps属性,值是false,如果不设置为false,则默认会操作表中的created_at和updated_at字段,我们表中一般没有这两个字段,所以设置为false,表示不要操作这两个字段。修饰词:public

第四:(可选)定义$fillable属性,表示使用模型插入数据时,允许插入到数据库的字段信息。修饰词:protected

黑马lavarel教程---5、模型操作(AR模式)第4张

注意:使用模型中create插入数据时,要设置$fillable允许入库的字段,使用$guarded是设置排除入库的字段。

2、模型控制器中调用

引入Member模型类;

黑马lavarel教程---5、模型操作(AR模式)第5张

模型的使用:模型在控制器中的使用方式有2

①直接像使用DB门面一样的操作方式:以调用静态方法为主的形式,该形式下模型不需要实例化,例如:Member::get() 等价于 DB::table(‘member’) -> get();

②实例化模型然后再去使用模型类(普通)

例如:$model = new Member();$model -> get();

3、定义测试路由

黑马lavarel教程---5、模型操作(AR模式)第6张

路由可以使用路由群组的方式进行定义。

4、基本操作

(1)添加数据

在laravel里面完成数据的添加可以使用两种方式:

方式一(AR模式):使用AR模式必须要实例化模型

注意:在laravel里面添加数据的时候,需要先实例化模型,然后为模型设置属性,最后调用save方法即可。

$member = new Member(); //映射关系1:将表映射到模型

$member-> name = value; //映射关系2:将字段映射到属性,属性名和字段名一致

$member -> age = value;

$member -> save(); //映射关系3:将记录映射到实例

如果模型中不去关联数据表,则会报以下的错误:

黑马lavarel教程---5、模型操作(AR模式)第7张

黑马lavarel教程---5、模型操作(AR模式)第8张

上面的这种方法可以完成数据的插入,但是不建议使用。我们可以使用laravel提供的更高级的操作。

方式二:

建立简易表单,表单中有姓名、年龄、邮箱的字段,要求能够提交

黑马lavarel教程---5、模型操作(AR模式)第9张

黑马lavarel教程---5、模型操作(AR模式)第10张

黑马lavarel教程---5、模型操作(AR模式)第11张

首先,在控制器文件引入Request这个类

use IlluminateHttpRequest;

Request类的使用:

①对象传递

黑马lavarel教程---5、模型操作(AR模式)第12张

②request语法(与input门面有点类似,方法名一致,但是input调用的是静态方法,而当前的不是)

$request->all()

$request->input('name');

$request->only([‘name1’,’name2’…])

$request->except([‘name1’,’name2’…])

$request->has(‘name’)

$request->get(‘name’)

添加操作代码语法如下;

Member::create($request->all())//返回值是一个对象

黑马lavarel教程---5、模型操作(AR模式)第13张

注意:如果使用create方法,则需要在模型中定义fillable属性,允许写入字段的定义,如果没有时间相关字段也需要禁用时间自动更新功能:

执行的结果:

黑马lavarel教程---5、模型操作(AR模式)第14张

(2)查询操作

获取指定主键的一条数据

$info = Member::find(4); // 静态方法调用,获取主键为4的数据

黑马lavarel教程---5、模型操作(AR模式)第15张

其结果集默认是一个对象。

如果需要在laravel中对象的结果集转化成数组,则需要在最终添加方法的调用:

-> get() -> toArray();

所以刚才的案例,如需要数组结果,则可以写成:

$data = Member::find(4) -> toArray();

黑马lavarel教程---5、模型操作(AR模式)第16张

获取符合指定条件的第一条记录

Member::where("id",'>',4)->first();

黑马lavarel教程---5、模型操作(AR模式)第17张

查询多行并且指定字段

Member::all()

Member::all([字段1,字段2]) //与get方法的区别,all不支持连接其他的辅助查询方法

相当于get方法

Member::get()

Member::get([字段1,字段2])

按条件查询指定多个字段

Member::where('id','>',2)->get([' 列 1',' 列 2']); //数组选列

Member::where('id','>',2)->select('列1','列2')->get(); //字符串选列

Member::where('id','>',2)->select( [' 列 1',' 列 2'] )->get(); //字符串选列

案例:测试在all方法之前,写一些辅助方法实现连贯操作

黑马lavarel教程---5、模型操作(AR模式)第18张

(3)修改数据

注意:在laravel里面如果需要更新数据(ORM模型方式),需要先调用模型的find方法获取对应的记录,返回一个模型对象,然后为该模型对象设置要更新的数据(对象的属性),最后调用save方法即可。

例如:

$user = User::find($id);

$user->title = $_POST['title'];

$user->content= $_POST['content'];

return $user->save() ? 'OK' : 'fail';

案例:实现ORM形式模型的修改操作。修改为7 的用户的邮箱地址为admin@itcast.cn

黑马lavarel教程---5、模型操作(AR模式)第19张

在AR模式中,更新操作的save并没有指定操作的是哪条记录,为什么save可以准确操作

模型调用对象一般是单例模式,所以前面Member::find(7)的时候模型就是指定的这条数据,所以save的时候更新的也就是这条数据

问题:能不能用模型去update呢?

答:可以使用update方法进行更新,也可以使用AR模式的方式进行更新。

黑马lavarel教程---5、模型操作(AR模式)第20张

(4)删除数据

注意:在laravel里面如果要删除数据,如果需要使用AR模式删除数据必须先根据主键id查询对应的记录,返回一个模型对象,然后调用模型对象的delete方法即可。

例如代码:

$user = User::find($id);

return $user->delete() ? 'ok' : 'fail';

案例:使用AR模式删除id为7的记录

黑马lavarel教程---5、模型操作(AR模式)第21张

问题:DB里面的删除方式能否在模型中使用?【可以】

免责声明:文章转载自《黑马lavarel教程---5、模型操作(AR模式)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL/MariaDB数据库的索引工作原理和优化Asp.net实现MVC处理文件的上传下载删除功能实例教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mysql数据表字段设置了默认值,插入数据后默认字段的值却为null,不是默认值

我将mysql的数据表的某个字段设置了默认值为1,当向该表插入数据的时候该字段的值不是默认值,而是null。 我的错误原因: 对数据库的操作我使用了持久化工具mybatis,插入数据的时候插入的是整个实体,直接使用的是持久层的insert(实体对象)方法插入的数据 这样就会出现一个问题,当实体对象中某个属性值为空时,对应的数据库的字段就会插入null值,而...

Go第六篇之结构体剖析

Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型。Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性。 Go 语言中的类型可以被实例化,使用new或&构造的类型实例的类型是类型的指针。 结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段”。字段有以下特性: 字段拥有自己的类型和值。...

JDBC数据类型、Java数据类型、标准sql类型

本概述是从《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference》这本书中摘引来的。JavaSoft 目前正在准备这本书。这本书是一本教程,同时也是 JDBC 的重要参考手册,它将作为 Java 系列的组成部份,在 1997 年春季由 Addison-Wesley 出版...

mssql语句精华指令

常用sql语句 1. 查看数据库的版本 select @@version 2. 查看数据库所在机器操作系统参数 exec master..xp_msver 3. 查看数据库启动的参数 sp_configure 4. 查看数据库启动时间 select convert(varchar(30),login_time,120) from master..syspr...

MyBatis的SQL语句映射文件详解

SQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace,一般定义为对应的接口类的路径。写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用 <mapper namespace="com.mybaits.bean.User"> <!-- 将结果集转化成对象 -->...

.NET插件系统

面临的问题       在开发插件系统中,我们通常会面临这样的问题:        一些功能并不是在开启时就要被使用的,例如VS中的大量功能对一个大部分程序员来说用不着,但框架本身却应该向用户提供该插件的相应信息?        在可视化的插件功能列表中,我们不仅希望提供简单的插件名称信息,更希望能以图片,或动画等形式展示其功能特性,便于用户选择。   ...