00:00
这节课来学习一下数据库模型。手册在I current OM快速入门里面,Love I current OM提供了漂亮简洁的啊来实现和数据库的交互。每一个数据库的表都对应一个模型。用来与表进行交互,简单的说就是我们数据库里面的一个表。啊,都可以和我们啊项目中的一个模型类进行一对一的一个关联,我们通过操作这个模型就可以操作这个数据库的表啊,包括这个cud等。在开始使用之前啊,要先检查我们的连接配置,这些我们在之前都配置过。定义一个模型。模型通常会在APP models目录下我们可以看到,呃,这里已经有一个默认的一个优的一个模型。好,创建模型最简单的方法就是使用命令。
01:01
P make model后面是我们模型的名字。如果我们想要在创建模型的时候生成数据库的迁移,可以加上杠杠。啊,Migration或者加上杠M,这里我们使用这个命令,在创建这个模型的同时生成一个这样的一个表迁移,这样的话,当我们去运行这个迁移的时候,会自动的帮我们创建这个数据库表。复制一下这个命令,当然啊,在创建模型的时候,还可以同时去创建其他的一些类,比如说控制器,比如说数据填充,比如说模型工厂啊,这里我们只需要一个啊数据迁移就可以了。在我们的项目啊,下面虚拟机里面的这个项目的这个目录里面执行PPR的命令。重新复制一下。啊,这个命令就会在我们的MOS目录下创建一个。
02:00
啊。这个模型。并且因为我们加了杠M参数,会同时给我们创建一个数据迁移。啊,在这个目前给我们创建一个数据迁移。执行一下,大家看一下。可以看到模型创建成功,而且迁移表也创建成功。看到了吧。我们把这个目录刷新一下,这里多了一个模型,这里刷新一下。啊,这里会多了一个。啊。这个表的一个。数据迁移文件。大家可能会有疑问啊,明明我创建了这个模型,为什么他给我啊,创建了这个表的一个迁移,还有这个表的一个迁移,这是我们的一个默认的一个约定啊。创建好之后,我们给这个迁移加一些字段,也是给我们表加一些字段。加一个字符串类型的name。然后运行迁移文件啊,执行迁移。
03:02
把这个CTRLC结束一下。Di。Merita。这样的话会把我们啊。这个迁移执行一次,然后在数据库里面给我们新建了一个这样一个表。同时我们还有一个这个模型,和这个表进行一一对应。刷新一下这个。啊,这里多了一个。这个表啊。看一下对应的这个flat模型啊,也就是说这个模型会和我们数据库的这个表啊进行一个一一对应,我们可以通过这个模型来操作这个数据表。啊蒸,包括他的这个蒸散改查的相关的一些数据操作都是可以的。但是我们可以看到啊,这个模型里面其实什么都没有配置,那它怎么是和这表进行关联的呢?就是要说到我们的一些默认的约定啊,也就是。嗯,Loquent的一些约定。
04:06
这里啊,这个模型,它将会从嗯,这个flat这个数据表检索和存储数据信息,首先看第一个约定数据表名称。我们并没有告诉elloquent,我们的flat模型是用哪个数据表。除非我们明确的指定了它。使用的一个名称,否则将会就是它默认以类的这个复数的一个形式来作为表明,也就是我们这个类的一个小写,然后它的一个复数的形式,嗯,作为一个表明,他去数据库里面去找对应的表。所以说我们这里这个flat,它对应的这个就是flat这个表,而假如我们的呃模型啊,这个名字和我们数据库表的名字不一致的时候,也就是比如说一个A一个B,就是不是复数形式的时候。可以使用table属性来指定表啊,自定义这个数据表。
05:03
在模型里面。啊,重写啊重写它的这个table属性,可以指定我们资金列表,当然这里。我们的表就是flash啊,你不写这个也行,你默认的话,它也会去找它的复数形式,除非你的表和你的模型不一致。可以用这个属性去重写,当然我们这些也没这么写也没问题啊。还有一个约定。组建。I也会假设每个数据表都有一个ID的出现。假如我们的表。我们的主键不是ID怎么办呢?就可以使用啊这个主键这个属性来重新。也就是说实际上啊,嗯,我们的这个模型呢,和我们的数据表啊,它有一个默认的一些啊,自动关联的一些约束。当然我们可以在这个模型里面去啊,自己设置和我们表的进行关联的一些关系,包括这个要关联的表明啊,包括要关联的这个啊组件呀啊都是可以的。
06:05
接着往下看,还有什么约定?还有就是。Aqu,它假设组件是一个自增的一个整数值,这就意味着默认情况下组件会自动的转为类型。假如我们希望使用。非递增或非素质的组件啊,需要把一个公开的这个属性设置为false。如果我们的组件不是一个整数,要在模型上啊,这个受保护的这个属性设置为啊,对应的一个类型42类型。啊,一般我们的这个主线都是这个啊,整形的一个。啊类型啊,当然还有一些是。不是的话,你就自己去设置一下就可以。还有一个默认约定,就是时间戳默认情况下。Loquent预期我们的数据表中存在create和update。
07:04
当然,因为我们的数据迁移表里面,我们指定了这个,所以说在创建啊,执行迁移的时候,给我们创建表的时候是有create和update字段,但我们有时候不需要这个字段,也就是表里面没有这两个字段的时候,这时候还要对模型进行一些设置,也就是说如果我们不想让aloquent这个模型自动帮我们管理。啊,这两个列可以将模型中的这个types属性算成first。不然的话,他就会就说会报错,因为在我们操作模型的时候,它会自动去维护这两个字段,比如我们更新了数据,它会自动去更新这个ipad。对吧,如果我们表里没有这个字段就会报错,所以说没有这两个字段的话呢,我们把这个属性设为false,它就不会去管理这两个列了啊,这是关于时间的,当然关于时间的一些默认约定,还有一个是时间显示的一些格式,可以通过啊这个data ma去指定啊,甚至是我们数据库存储的这个。
08:01
Update或者create,如果不是啊,这两个名字的话。也可以通过啊这两个常量去重新去设置。当我们设置之后,就是这个模型就会帮我们去维护数据库里面的这两个字段,这些都是可以去指定的。还有一个约定就是数据库连接。啊,默认情况下,A库的模型将会使用我们应用程序的默认的数据库连接,如果我们这个模型是啊其他的一个啊数据库的一个连接的话,可以指定它的啊属性。这个是在多数据库连接的时候可以会用到,然后我们这个项目啊,我们学习就比较简单,就是单数据库的,所以就用默认的这个连接就可以。还有是默认属性值,我们可以啊定义模型的。啊,这个属性来设置一些默认的一些属性值。好。这里模型的一些默认约定就介绍到这里。
09:05
我们的练习还是在。Test controller啊,将会通过啊,增删改查这么几项。来去学习我们的模型,因为我们使用模型其实最主要的也是为了去操作这个数据库嘛,所以对应的还是去看这个增删改查这一块。代差。当然不一定按照这个顺序,我们可以按照手册的顺序来看,首先是一个模型的检索啊,这是一个啊查询的一个操作。在我们创建的模型和数据库的关联之后,就可以从数据库里面去查询数据了。啊。将每个。啊,Eequent模型,你就想象成是一个强大的查询构造器。啊,用它可以快速的去查询与其相关的数据表。
10:02
啊,也就是说。创建了模型和关联的数据表后,就可以使用这个模型啊进行。数据库的表的一些操作。当然所有可以操作的方法,其实我们在之前学数据库的时候,这个查询路道题里面。啊,都有学过了,所以我们可以把这个模型去想象成一个强大的查询构造器啊,也就是我们这里面查询构造器里面提供的这些方法,在我们模型这里啊,基本上都是可以使用的。所以啊,这里的查询我们就不做细讲。使用模型进行查询,你可以直接使用这个模型类,比如我们的FLY模型类。我们使用编辑器进行回车的话,它会自动帮我们引入相应的命名空间啊,如果你没有就是说引入这个命名空间的话。你需要。使用它的这个完整的一个命名空间。才可以。
11:01
好,查询的话使用or可以查询所有。使用get。也可以查询。所有。也可以加上其他的一些查询条件,比如说where。Name。啊,等于这个。北京的。啊,然后使用first可以检索出一条对吧。或者使用这个泛的去查询一条,我们查询构造器里面的。这些方法在模型里面都是啊,可以使用的,比如查询ID为一的。这条航班的信息。还可怎么查呢?还可以就是where first去进行一个简写,写成。啊。
12:04
啊,可以这样写。这里面是我们的Y条件。哎,对,可以这样写啊,这些啊比较简单一些查询,包括附加一些条件。直接查询条件。现在。这个表里面没有数据啊,所以我们先去。看一下啊,增加添加一些数据之后再来测试这些查询先注释掉。找到。插入和更新的地方。要往数据库里面新增一条记录。啊,要先创建一个模型的实例,然后给实例设置属性,然后使用save方法。因为我们使用模型的方式去插入数据,所以说你要先创建一个新的一个模型。等于new flat啊,创建一个新的一个模型,接着是给这个模型去设置属性。
13:07
他有什么字段,我们就给他设置什么属性。是这个北京的。好,最后使用它的。C方法就会往数据库进行一个插入操作。这就是使用模型添加。来执行一下试试。同时我们打印一下这个结果啊。呃,打印两个,输出两个,先打印一下输出我们的这个flag,看它是什么样的一个变化,再看我们的这个结果是什么好吧。请求,Test。可以看到啊。我们的这个flat,哎,就是我们插入后的一个对象。就是它flat是我们,嗯,插入数据后之后给我们返回的一个。
14:04
啊,模型对象啊,就是这条记录,这个就是新插入的这条数据,还可以看到他的ID,这样的话,如果我们要使用这个新插入数据的ID,可以直接使用这个ID。不用在使用之前,我们DB查询构造器啊,这个insert。改ID这种方法。而我们打印的第二个呢,它是一个处。啊,这是我们打印的这个结果啊,它是一个出。这是啊,一个插入的一个方式。刷新一下数据没看到啊。接着看一下更新,使用私有方法同样可以用来更新数据库已存在的一个模型。在更新的时候,我们先要查出来这个模型,然后设置要更新的一个属性,最后进行save就可以了,而update字段它会自动更新,不用我们去手动维护。试一下更新在这里写。
15:02
再把那个注释掉。更新的话呢,你要先查出来。啊,使用这个模型,使用他的饭的方法,我们来查第一条。之后对它的属性进行重新赋值。就可以了。比如说改成。上海。最后C5。就能完成更新操作,非常的省事。先看一下数据库现在的一个记录。是北京。我们执行一下更新。刷新一下。是不是已经完成了更新啊,这是一个更新的一个方式。这个是使用模型更新。使用模型更新。
16:04
接下来啊,批量更新。批量更新呢,是使用。这个模型的update方法啊,进行一个批量的一个更新。现在我们把所有。啊。这个我们没有啊,这个没有,我们只有一个name字段,就把所有内幕。喂。上海的所有,内蒙为上海的。把他的name更新成。北京。来执行一下。回来刷新一下。是不是已经完成了更新啊?如果要更新多个字段的话,在数组里面接着写其他的可就可以了。这是批量更新。嗯,接着看一下什么呢。
17:02
属性的一个变化啊,因为。可以看到这里啊,比如我们这里更新的时候,查出来这个数据对吧,然后对这个数据,对这个它的这个属性进行了一个设置,是不是说明它的属性发生了变化,然后通过这些方法呢,可以检测它的属性有没有发生变化。不是特别常用啊,大家做下了解就可以了。包括这个,呃,如果我们对它的属性进行了一个新的一个设值赋值,我们使用这个方法也是可以获取到原始的一个值,只要我们没有C5之前,也就没有执行更新之前这些属性的设置都是啊临时的。可以吧,这个我们稍微来试一下。嗯。获取原始啊,属性原始值。
18:06
还是一样啊,先查出来它。先查出来我们的模型。然后我们对它进行一个设置。这时候。啊,我们。看一下啊,看一下这个Fla的这个命是什么。是不是上海?是显示的我们这里临时设置过的一个名字,对吧,但是我们可以通过什么呢?通过。模型对象的啊,这个方法船上我们要获取的一个属性,去看一下它的这个原始的这个属性是什么。是不是北京?对不对,这里我们传了一个啊,我们要获取的一个属性的一个名字,如果不传的话呢,他会拿到一个数组,把所有的原始的属性。
19:03
啊,都达到。看到了吧。啊,当然我们也可以去,呃,打印一下我们的这个模型。啊,再次打一下这个模型。它其实上就是获取的这个模型里面的这个原始的这个数字里面的一个。属性啊,也就是说。啊,获取的实际上是它这里面的这个值,可以看到这里还是为零,对不对,我们这里去临时去设置的这个啊属性呢,只是在这个字段里面啊,这个里面进行一个设置。在我们执行私有方法的时候,才会把它给更新到数据库。是关于这个原始属性的一个。更新了,你们要注意点就是。一定要记得加Y条件,要不然还是那个情况,你整个表就更新了嘛,但是你对于这种。对象的这种更新的话,那肯定是你更新的指定的这个对象对不对。对,但是你批量更新的时候一定要注意把围绕条件写好。
20:04
接下来看一看啊。批量赋值,也就是批量添加。啊,这个是添加一条数据。批量添加呢?在这个模型里面使用批量添加保存新的模型,这个方法会返回一个模型的一个实例。不过。啊,它会受到什么一个限制呢。就是我们使用P添加,添加的话会受到模型里面的。啊。这个属性和这个属性的一个限制,也就是说这两个属性去设置了,呃,一些不可被批量赋值的一些字段。一个很简单的例子,比如,如果我们允许所有的字段都可以让用户去赋值,假如用户通过这个AB请求传入了一命这个参数,然后我们进行批量创建的时候,A就。创建了一个这个一直饿的面对吧,让自己的这个别人的一个用户升级成管理员了,就会造成一些不安全的一些啊这个影响。
21:05
所以我们如果使用模型的话,要就是在模型的这个类里面去定义这个属性。啊,允许批量赋值的属性,只有定义了这个属性之后,我们才可以使用create去批量的添加数据。一旦设置好了这个批量复制属性,就可以通过create方法去向数据库插入数据。而方法执行的结果会返回这个模型的实例,我们先试一试,我们不加这个属性,看一看会有什么结果。然后是一个数组,我们要创建的数据。Name。上海。哎。现在看一下它的一个执行结果。
22:03
好,他会给你报错,他说你的这个name啊,要就是说告诉你把这个name要添加到允许被批量赋值的这个属性中才可以是吧。啊,也就是这个属性。所以我们去定一下这个属性。在莱特的这个模型里面啊。把注释写一写啊。允许。批量插入的字段,有多个字段的话,在后面写就可以了。啊,这时候再去添加。就不会报错了,它会返回我们添加后的一个模型的一个实例。接着来看一下。啊,如何添加多条数据。
23:03
是使用它吗?我们来试一下。复制一个。这个数组。添加两条来试一下。你会发现啊,这里会报错,会找不到这个内的一个值说明什么,不是使用这个方法进行。多条数据的添加,从手册里面我们也会看到这个可的方法,它返回的是什么呢?是。啊,这个实力啊。对吧,所以说不是用可的方法。那怎么添加多条数据呢?啊,使用隐私的方法啊。银色的之前我们说过,在我们查询构造曲面方法,在这里面都是可以用的啊,银色的。
24:04
好,这样就可以啊,一次性插入多条数据。先我们先刷新下数据库,看一看之前我们执行的这条添加的这一条数据啊,那接着去使用银色的去插入这两条数据。也看到出插入成功对吧,那我们看一下数据库。是不是多了两条数据,但是你会发现它没有create at和update,这说明什么?啊,就是insert的话,它不会去自动帮我们去维护啊这两个字段。不会去维护两个时间字段,我们如果使用模型的话,就是一条一条模型的话去去插入或者去修改的话。那是可以的,所以说你要使用隐私,然后使用这个模型对象去插入多条数据的话,要注意就是把这个时间字段也要给加上才行。听了吗?这里写一下啊。
25:02
Insert不维护。时间最短。这个就是添加还可以使用一个啊方法使用这个。这个feel啊。就是在我们已经有一个模型实力的情况下,可以使用费用。啊,这个你要注意啊,已已经有一个模型实例。我们上面这个使用添加。是不是直接使用的这个模型类对吧。那什么叫已经有一个模型实例呢?比如第一种情吗?这个情况就是我们创建了一个模型实例吗?所以说当我们已经有一个模型实例的情况下,是可以使用这个file进行一个填充啊,进行添加。首先要有一个模型实力才可以啊。等于牛。Flat。之后使用flat的服用方法。
26:05
把我们的字段给添加上,填充上。好,最后直行C5就可以了。啊,它跟第一个方法去比的话,就不用我们一个一个属性去给它这样赋值,直接写到一个数组里面就可以了。看一下。啊,没有任何输出,我们这里没有打印,打印它的话,它也是一个模型的一个实例啊。刷新结果。是不是有一条?啊,这几种常见的添加方式。继续看一下手册。啊,如果你要批量的赋值的这个字段中有杰森。啊,这种类型的话,像买车5.7上,比如支持这个健码,需要一个一个的键去指定。还有一个和我们的允许批量赋值对应的一个。
27:02
选项是不允许相负射子弹。它和它是对应的啊,这两个我们配置一个就可以了。还有其他创建的方法。First or first or new?这个都是在进行查询的时候啊,如果查不着的话,就会进行创建,这个自行尝试一下。包括更新时候进行创建。嗯,接下来看一下删除模型,删除模型可以直接在实例上调用delete方法进行删除。也就是说先查出到这个模型之后使用D对的方法进行删除,我们来试一试。现在删除。山在这里啊。好。这个我们就直接这么写吧,上面已经最上面已经引入了秘密空间查询第一条数据,然后进行删除。看第一条还会被赞。
28:01
执行一下,我们看看的结果是什么。好处,删除成功。还有数据库。第一场没了对吧。当然也可以进行一个批量删除。比如。呃,我们加上这个VR条件。就是使用。就是删除一条,把这个先写上,先写完。删除一条。这个先注释掉。删除多个。多个的话呢,直接使用。啊,这个模型类,然后加上一些搜索条件。比如说name。啊,等于。上海的。进行删除。
29:01
看一看它的结果是什么,打印一下这个结果啊。三条啊,它是返回你删除删除的这个条数,看看这三条上海的还有没有刷新一下是不是没了。删除多少可以这么去写。还可以使用destroy啊,通过主键去销毁。这个啊,自己写一下试一试啊。啊,这个通过模型进行多条删除,这个例子我们写了。啊,还有是软删除,软删除呢做下了解,软删除什么意思呢?就是在我们数据库里面有一个会有一个delete at字段啊,我们在模型里面如果使用软圆球的话,就加上那个柚子。啊,使用这个软删除,并且把它这个名字连都引好之后。啊,我们在执行删除的时候,不是真的给我们删除了,而是。啊,对这个字段进行了一个更新。
30:00
如果在恢复的时候呢。嗯,使用一个方法可以把这个数据进行恢复。这个就是软删除,就是不是真正的删除。而是通过一个字段。它的一个呃,值的一个情况,如果delete艾不为空,就是删除了,就是显示一个删除的时间,如果它为空,就是说明是正常的一个数据没有被删除,这样有一个好处是啊,我们不是真正的去删除了一个数据。而只是说改变了它的一个状态,但是不影响我们的查询啊,就是只是如果它是删除的,就是delete艾是不为空的,那么我们这个查询是查询不出来的啊,除非你用特殊的查询,比如说啊。比如说什么呢,查询包含软删除的一些数据啊,要使用这个。啊,这个位置这样的去查,才可以加上这个去查。或者说只查询已经删除了的啊,这么去查。
31:03
就大家可以试一下啊,你要使用染色图的话,必须要啊,保证你的表里面有这个字段,而且在模型里面配上这个参数就可以了。啊,这时候你再删除的话,就不是真正的数据从数据库里面去删掉了,而是啊,只是字段多了一个时间而已。一开始delete艾是空的,如果你删除的话,Delete就会多了一个你当前删除的一个时间。但是我们如果是正常的查询的话呢。啊,是查不到这个已经删除了的。除非你用。啊,这种特殊的查询才可以。包括这个恢复软删除啊,怎么去恢复。啊,包括永久的删除。只有执行了这个永久的删除,才是真正的从输入删除了。当然我们这里的话就不再去演示这个软删除了。使用这个啊,这个方法可以去复制一个新的未保存到数据库的一个实例。
32:03
啊,复制一个新的一个实例。嗯,也就是通过啊这个方法可以去复制一个实例,但是这个实例量是没有保存,我们可以通过save去进行一个保存。那我们测试一下。他也算是属于。呃,这个添加的一类吧,我写到这里啊复制。首先。呃,看看我们的数据还有几,还有IDV9的这个对吧。查询一下啊。Find。九。先看一看能不能查着。有这个模型啊,有这条数据模型。接着呢?啊,进行复制。等于。
33:02
使用他的这个。这个方法。Replaced方法。啊,这样的话就是复制了一份这个模型。给到了这个它它是没有啊保存到啊这个数据库的,所以我们在使用它的负私有方法就可以把它存到数据库,我们先看一看它是什么样的一个类型。啊。也是一个啊这样一个。啊,这个。模型啊,一个Fla的模型,但是它没有啊这个属性,它只有一个name对吧,因为它是啊复制的这个。一个其他的模型。如果执行它的这个save,就会把它保存到数据库啊,当然在save之前你还可以去。啊,去修改一下它的一个属性。比如。
34:02
我们把它的name改成。北京啊,也就是说在。提交到数据库之前可以修改啊属性。执行一下。哎,这时候就添加成功了,对吧。啊,这样的话就去复制一个。来看个手册啊,查询作用率这些。模型的一个比较事件,我们在后面会说。啊,包括B包的一个使用。还有观察者。好。常用的模型的操作啊,就这些事件的话,我们放到后面去讲,主要的也就是啊增删改查,还有就是关于模型的一些啊,默认啊约定的一些配置。
35:00
我们把这个基本的啊,模型的使用掌握了之后。就可以使用数据库的一个模型去操作我们的数据库。
我来说两句