- 博客(157)
- 收藏
- 关注
原创 23.Laravel集合的常用方法
collection = collect(['name'=>'Mr.Lee', 'gender'=>'男']);PS:相关的还有 every()、except()、only()、firstWhere()、last()等方法;$collection = collect([['男'=>1], ['女'=>1], ['男'=>3]]);'details'=>['gender'=>'男', 'age'=>100]]);['name'=>'Mr.Lee', 'gender'=>'男'],
2023-05-24 21:31:50
849
原创 22.Laravel集合的使用
处理数据集合的方法,可链式调用;7. 如果三十多个方法都没有你要的,还可以自定义方法,比如说所有英文大写;6. 这里我们把最常用的演示一遍,剩下的所有,可以自行参考手册方法列表;4. 除了数据库对象返回的数据集合之外,我们还可以自行创建数据集合;PS:下一节,我们会花一节课,把最常用的方法再运行一遍加深印象;2. 比如,我们从数据库得到的数据列表,它就是一种集合;3. 数据集合,提供了大量的方法方便我们进行各种操作;本节课我们来开始学习数据集合的创建和使用方法。//创建一个数据集合。
2023-05-24 21:31:12
720
原创 21.模型的访问器和修改器
3. 可以设置字段输出的类型,比如设置一个布尔型,输出时就是 true 和 false;PS:注意,如果 gender 之前已经有访问器修改过,上面的方法会得到修改过的结果;3. 我们也可以创建一个虚拟字段,用已有的数据字段进行整合,不过要进行数据追加;//访问器,前固定 get,后固定 Attribute,Gender 是字段名。2. 比如,我们在输出性别时,在性别左右加上括号,或给邮件转换为大写;1. 修改器,相对于访问器,是在写入的时候拦截,进行修改再写入;//修改器,写入数据时,将邮箱转换为大写。
2023-05-18 11:22:12
658
原创 20.模型的作用域
PS:我们可以将性别为男这个片段,封装成一个单独的方法,然后统一在这个模型下调用;PS:而在控制器端,并不需要做任何设置,即可自动添加 status=1 的条件;6. 当然,如果这个全局只是针对某个模块,并不需要创建一个全局类,直接闭包即可;5. 上面的方法比较死板,适合简单粗暴,如果想要灵活多变,支持传递参数;2. 而这个条件,可能只是在这个模型对应的数据表使用,别的表并不使用;5. 此时,还不能实现全局,因为需要在模型设置个开关,让其富有灵活性;
2023-05-18 11:21:29
475
原创 19.批量赋值和软删除
11. 如果开启了软删除,还需要强行真实的永久删除,可以使用 forceDelete()方法;5. 当开启了软删除功能,之前的删除操作,都会变成更新操作,给 deleted_at 赋值;9. 如果要对这个数据进行软删除的判断,是否是被软删除的,可以使用 trashed();6. 而当我们开启了软删除的功能后,此时通过正常的数据获取列表,会自动隐藏;1. 什么叫软删除?它相对于真实的删除,而并非真正的删除,只是隐藏了;//获取某个被软删除的数据(即使不是软删除的也可以搜索到)
2023-05-17 20:07:42
786
原创 18.模型的增删改
1. 新增方法如下,注意:默认模型接管 created_at 和 updated_at;6. 如果你是通过主键 id 删除,那使用 destroy(id)方法,免去查询操作;PS:必须在模型中定义批量赋值的可填充字段,否则无法生效;防止用户不小心设置新值;4. 使用 create()方法实现新增,但需要在模型端设置批量赋值的许可;2. 更新,只要是查找到一条数据的情况下使用 save()就是更新;本节课我们来开始学习数据库的模型的增删改的操作。5. 使用 delete()方法,可以删除数据;
2023-05-16 10:17:57
385
原创 17.模型的定义
12. 默认读取 database.php 配置的数据库连接,也可以在模型端局部更改;3. 而调用的时候,我们也知道表名要遵循它默认规则,修改为复数,或特定;1. 之前在查询构造器部分,把常用的数据库操作基本讲完,模型大体相同;4. 虽然安装了插件,但模型还是没有代码提示,可以通过安装插件解决;5. 其它查询方法基本和查询构造器一样,如果有不一样,参考错误提示;4. 系统假定你的主键为 id,如果你要修改默认主键,可以特定;2. 比如,我们要查询所有数据,直接使用模型::all()即可;
2023-05-16 10:17:38
469
原创 16.构造器的增删改
'username'=>'李黑', 'password'=>'654321', 'details'=>'123']7. 更新数据时,可以使用自增 increment()和自减 decrement()方法;5. 使用 updateOrInsert()方法,可以先进行查找修改,如不存在,则新增;2. 使用 insertOrIgnore()方法,可以忽略重复插入数据的错误;3. 使用 insertGetId()方法,获取新增后的自增 ID;//参数 2:修改的内容(新增的内容)//忽略重复新增数据的错误。
2023-05-15 10:52:42
484
原创 17.模型的定义
12. 默认读取 database.php 配置的数据库连接,也可以在模型端局部更改;3. 而调用的时候,我们也知道表名要遵循它默认规则,修改为复数,或特定;1. 之前在查询构造器部分,把常用的数据库操作基本讲完,模型大体相同;4. 虽然安装了插件,但模型还是没有代码提示,可以通过安装插件解决;5. 其它查询方法基本和查询构造器一样,如果有不一样,参考错误提示;4. 系统假定你的主键为 id,如果你要修改默认主键,可以特定;2. 比如,我们要查询所有数据,直接使用模型::all()即可;
2023-05-15 10:52:33
451
原创 15.构造器的 join 查询
3. 使用 crossjoin 交叉连接查询,会生成笛卡尔积,再用 distinct()取消重复;4. 如果你想要实现闭包查询,和 where 类似,只不过要用 on 和 orOn 方法;1. 使用 join 实现内联接的多表查询,比如三张表进行 inner join 查询;6. 使用 union()或 unionAll()方法实现两个查询的合并操作;PS:on()方法后面如果想要再增加筛选条件,可以追加 where();5. 使用 joinSub 实现子连接查询,将对应的内容合并在一起输出;
2023-05-14 13:05:02
427
原创 14.构造器的排序分组.子查询
/whereRaw 这句也可以替代为:whereColumn('books.user_id','users.id');//支持符号支持数组多个字段格式['create_time','>', 'update_time']5. 使用 skip()和 take()限制结果集,或使用 offset()和 limit();2. 也可以使用 where(字段,function())闭包,来实现一个子查询;//支持符号'create_time','>', 'update_time'
2023-05-14 13:04:27
310
原创 13.构造器的 where 派生查询
PS:三个参数支持大于小于之类的操作 orWhereDate('create_time','>', '2018-12-11')PS:这里还支持相关四种:whereYear/whereMonth/whereDay/whereTime,支持 or 前缀;->where('username', 'like', '%小%');//where() + orWhere 实现 or 条件查询。$query->where('gender', '女')->orWhere('gender', '女')
2023-05-13 11:10:11
638
原创 12.构造器的查询表达式
users = DB::table('users')->where('username', 'like', '%小%')->get();3. DB::raw()方法可以在 select()内部实现原生表达式,否则解析错误;2. addSelect()方法,可以在你基础的查询构造器上再增加想要显示的字段;//如果条件都是等于,查看 SQL 语句用->toSql()替换->get()1. where()查询,即条件查询,完整形式需要字段表达式和值三个;['gender', '=', '男']
2023-05-13 11:07:21
1014
原创 11.构造器的查询.分块.聚合
2. 构造器查询提供了:count()、max()、min()、avg()和 sum()聚合查询;3. 构造器查询两个判断记录是否存在的方法:exists()和 doesntexists()方法;1. table()方法引入相应的表,get()方法可以查询当前表的所有数据;3. value(字段名)方法,可以获取到第一条数据的指定字段的值;4. find(id)方法,可以获取指定 id 的一条数据;2. first()方法,可以获取到第一条数据;//切割分块执行,每次读取 3 条,id 排序;
2023-05-12 22:12:17
999
原创 10.数据库配置入门
11. 前缀可以在 database.php 修改添加:laravel_,最终变为:laravel_users;2. 数据库的配置在 config/database.php,如果是本地可以直接配置.env 文件;//这种写法去掉了外围的数组下标 0。13. 可能会加 es,可能会加 ies,也可能是 child 编程 children 之类的;8. 使用 Eloquent ORM 模型来操作数据库,使用命令在 Http 目录下创建模型;10. 而我们真实的数据库表为:laravel_user,为何会这样?
2023-05-12 22:11:44
1320
原创 09.表单伪造和 CSRF 保护
3. 表单页以 post 发送,路由也使用 post 接受,以下表单提交会出现 419 错误;2. 先在 TaskController 创建两个方法,一个表单页,一个接受表单数据路由;5. 表单可以实现 POST 提交方式,那其它提交方式该如何实现呢?4. 这是为了避免被跨站请求伪造攻击,框架提供了 CSRF 令牌保护,请求时验证;用户名:本节课我们来开始学习表单伪造和 CSRF 保护的功能。
2023-05-11 12:10:26
634
原创 08.资源嵌套.浅嵌套.自定义
return '编辑博文下的评论,博文 id:'.$blog_id.',评论 id:'.$comment_id;7. 而实际上,每个 id 都是独立唯一的,并不需要父 id 和子 id 同时存在;8. 为了优化资源嵌套,通过路由方法->shallow()实现浅层嵌套方法;2. 比如开发过博客系统,留言帖子系统之类,具有类似思维,否则你懂的..;本节课我们来开始学习控制器的资源嵌套功能、浅嵌套以及资源自定义。5. 以上需求,可以通过嵌套资源路由来实现这个功能;return '评论 id.'.$id;
2023-05-11 12:09:45
534
原创 07.资源控制器
PUT/PATCH blogs/{blog} update() blogs.update 从编辑页中接受处理。http://localhost:8000/blogs/10/edit //可以访问到 edit 方法。GET blogs/create create() blogs.create 创建页面(表单页)GET blogs/{blog}/edit edit() blogs.edit 编辑(表单页)//API 资源,并不需要 HTML 页面(create,edit),会排除。
2023-05-10 20:01:54
934
原创 05.回退.当前路由.单行为
因为继承基类后,可以使用基类的方法,比如中间件等;4. 如果你想要定义一个只执行一个方法的控制器,可以使用单行为控制器;本节课我们来开始学习路由和控制器的一些方法:回退、当前路由、单行为;1. 之前的课程,我们简单的创建和定义了控制器,并继承了控制器基类;6. 单行为控制器,路由定义就不需要指定特定的方法,指定控制器即可;7. 单行为控制器只是语义上的单行为,并没有限制创建更多方法访问;2. 可以使用回退路由,让不存在的路由自动跳转到你指定的页面去;//返回当前路由指向的方法。//返回当前路由的名称。
2023-05-09 11:59:18
897
原创 04. 路由命名和分组
Route::group(['middleware'=>'中间名'], function () {});Route::middleware(['中间件'])->group(function () {});2. 在控制器区域,使用助手函数 route()来获取路由生成的 URL 地址;PS:如果需要更改成/task/10 模式,路由需要相应更改 task/{id}//生成 url 地址,http://localhost:8000/task。2. 可以将中间件作用域路由分组中,有两种写法,至于中间件?
2023-05-09 11:58:44
945
原创 03. 路由参数.重定向.视图
/参数 2:view,resources/views/task.blade.php。2. 使用视图路由,有三个参数:1.URI(必);1. 在使用视图路由之前,我们先要创建一个视图(MVC)中的 V 部分;//参数 1:URI,localhost:8000/task。//这里 view()的参数 1 是视图名称。//参数 3:传参,{{$id}}
2023-05-08 20:41:54
528
原创 02. 路由的定义和控制器
http://localhost:8000/index 7. 在路由定义上,我们采用了::get()这个方法,它接受的就是 GET 提交;8. ::post()、::put()、::delete()是表单和 Ajax 的提交接受方式;2. 简单点理解,就是为了提供访问程序的 URL 地址,所做的一些设置工作;13. 那么闭包的$id,可以接受 url 传递过来的 5,最终输出 5;6. 我们创建一个路由,让它返回一段信息,并设置响应的 url 地址;
2023-05-08 20:41:11
947
原创 01. Laravel 入门和安装
那么对于这种升级策略来说,基础语法几乎不会有太多变动,不会增加学习成本;也正是如此,课程已经不写什么版本了,用最新版本基本无碍;基础篇基本框架的核心内容语法等,扩展篇主要是工具集。更多的配置和问题,参考官方手册安装篇查阅即可;框架内容较多,课程要分为两个篇幅,基础篇和扩展篇。到底怎么读,由于不是真实的单词,导致争论较多。开始进入到版本化方案,每六个月发布一次版本;这个版本,后来就开始疯狂升级,升级了几年现在。来进行安装,官网也提供了安装器,只不过有点问题。框架的学习,主要了解框架的安装和配置信息。
2023-05-07 22:51:56
519
原创 20.总结回顾
对于一线的同学,慢慢抠源码刷面试题吧。网上源码分析或面试题的课程也有不少;我个人建议先学完常用的之后,做多案例,手册来回查的学习模式;比如学习项目实战课程,或者下载源码阅读学习,生僻的知识插。实战课程,微实战课程,以及相关插件、组件、主要讲解脚手架、路由、状态管理等插件;本节课我们来要了解一下。
2023-05-07 22:43:54
73
原创 19.render
参数,可以是直接的节点内容,也或者作为嵌套使用;表示,当然,这里很灵活,直接放节点内容也可以;也可以是子组件,此时第二参数可以传递。:当然,你也可以为了完整参数结构将。结构,大部分场景也推荐这种方式;也提供了另一种方式就是:渲染函数。之前一直使用模板的方式构建。本节课我们来要了解一下。如果只有两个参数,参数。函数返回一个虚拟节点。
2023-05-07 22:42:00
398
原创 18.模板引用
2. ref 不但可以在元素标签上设置,也可以在组件标签上设置;1. 在 Dom 节点上设置 ref,可以获取和修改这个节点;本节课我们来要了解一下 Vue3.x 中的 ref 使用。PS:组件设置,可以直接得到这个组件代理对象信息;// 获取 Dom 节点。
2023-05-06 21:00:09
575
原创 17.provide.inject.下
本节课我们来要了解一下 Vue3.x 中的 provide.inject(提供.注入)功能;1. 使用 Composition API,也是使用 import 导入来实现的;3. 为了避免子组件去更改父组件的 provide 属性,可以在提供时设置只读;PS:建议修改值都在提供方修改,也就是这里的 App.vue,提高阅读和维护;PS:如果需要实现响应式,那也非常简单,直接使用 ref 包含住即可;2. 如果要修改响应式的值,那该如何操作呢?一.provide.inject。
2023-05-06 20:58:56
493
原创 16.provide.inject.上
8. 如果使用 provide/inject ,在祖父设置 provide,孙子设置 inject 即可;3. 在前面的例子中 Props.vue 和 Child.vue 形成了父子关系,并 Props 通信;PS:此时数据传递,基本跳过了父组件,只需要在祖父设置提供数据,子组件获取数据即可;PS:当然,这些本身是存在依赖关系的,祖父通过路由加载了父,父组件加载子组件;1. 在更多复杂的场景中,组件可能有祖父孙三代组件关联,并且每一代有多个;// Provide.vue(父)// App.vue(祖父)
2023-05-05 13:36:47
580
原创 15.setup.emit
本节课我们来要了解一下 Vue3.x 中的 setup()下 context 的 emit 用法;1. 在 setup()函数中,第二个参数可以解构出三个属性:attrs、slots、emit;3. 在子组件创建一个按钮,通过点击这个按钮触发 emit 事件,想父组件传数据;PS:由于上节课使用了 click 方法,这次内部子组件又使用,会产生冒泡问题;2. 子组件向父组件传递信息,我们可以使用自定义事件,也就是 emit 属性;4. 在父组件,要使用 emit 发送的事件名称来触发,并获取相应的值;
2023-05-05 13:36:15
1367
原创 14.setup.attrs
PS:发现 attrs 可以识别事件属性 clickTest,普通属性 size,但不能识别 props 属性;PS:所以,使用 attrs 来代替 Props 显示,那么 return 时要注意响应式问题;PS:当我们注释掉 Props 声明,那么 attrs 就识别了,所以,他们是分开识别的;2. 首先,context 含义为:结合上下文获取相关属性的内容,并且都是非响应式;3. 我们在父组件调用子组件时,传递不同的属性和事件,看看 attrs 是否能识别;
2023-05-04 11:54:15
760
原创 13.setup.props
PS:注意,这里不要使用 setup({title})解构,会丢失响应式,props 本身是响应式的;1. 在 setup()函数中,第一个参数可以传递 props,用于组件之间的通信;本节课我们来要了解一下 Vue3.x 中的 setup()下 props 用法;2. 我们可以先创建一个子组件 Child.vue,然后被父组件调用导入;PS:并且,props.title 是只读的,无法通过这个改变;props.title = 'Mr.Lee' // 只读,不可变。
2023-05-04 11:52:25
776
原创 12.生命周期钩子
(2) . beforeCreate 和 created 不需要显式声明,setup 本身即是;1. 生命周期的理念和传统的 options 是一样的,在 setup()下用法有所区别;(1) . 所有生命周期使用回调函数方式触发,格式为:on+钩名;(3) . 生命周期的钩子也需要通过 import 导入使用;本节课我们来要了解一下 Vue3.x 中的生命周期的用法;PS:其余的参考 API 文档即可;// 页面载入渲染后。
2023-05-04 11:51:45
69
原创 11.watch
PS:在侦听的第一个参数,如果没有使用箭头函数,会自动展开.value;(1) . 侦听特定的数据源(watchEffect 是收集依赖式);(2) . 副作用在第二参数回调执行,并且是懒执行(数据源发生变更);本节课我们来要了解一下 Vue3.x 中的侦听 watch 的用法;// 这里的 count.vaue 表示要监听的数据源。PS:参数 1,也可以使用 return 返回的方式;(3) . 可以访问当前更变的值和上一次变更前的值;// 在这里执行副作用,参数 1,2 为新旧值。
2023-05-03 15:26:37
1042
原创 10.watchEffect.下
console.log('将在响应式 property 或 ref 作为依赖项被追踪时被调用')1. 在 watchEffect()中的第二参数,我们可以设置一下 options 选项;本节课我们来要了解一下 Vue3.x 中的侦听 watchEffect 的用法;3. 在开发模式中,有两个侦听器的调试选项,可以帮助我们检查侦听问题;console.log('将在依赖项变更导致副作用被触发时被调用')(2) . 组件 update 也是一个被侦听的副作用;(3) . 它会在副作用列队最后被执行;
2023-05-03 15:24:32
702
原创 09.watchEffect.中
1. 在使用 watchEffect 异步操作时,会产生一些副作用,需要一些清理手段;// 当依赖变更执行 watchEffect 时,最先执行这个副作用回调。5. 但这个功能问题在于:每一个字符都会调用执行异步,从而发生抖动现象;6. 我们的想法是:在一定时间内的输入字符不去异步调用,最调用最后一个;// 所以,当第二次执行时,会先执行这个回调,再执行上面的输出。// 清理副作用,也就是取消当前的定时器,防止被检索。// onInvalidate 当副作用失效时回调。// 获得当前的定时器。
2023-05-02 23:58:19
844
原创 08.watchEffect.上
/ 这里虽然变革了,但如果在 watchEffect 并没有当作依赖收集,则不会执行回调函数。1. watchEffect 的作用是响应式的追踪其相关依赖,并当依赖变更时重新执行;// 这里输出的响应式数据 count,所以会自动收集其依赖,监控依赖的变更。// 这里会被 watchEffect 当作依赖收集,并监控变更。// 如果依赖进行了变更,会再执行一次回调函数。// 调用 stop()插入到你想停止的位置。// 最终导致执行两次,以此列推。// 响应式的追踪依赖。// 第二个响应式数据。
2023-05-02 23:53:20
1051
原创 07.computed
1. computed 是组合式 API 中的计算属性的功能,和传统式基本一致;本节课我们来要了解一下 Vue3.x 中的计算属性 computed 用法;一.computed。
2023-04-29 12:07:28
765
原创 06.toRef 和 toRefs
obj.name = 'Mr.Wang' 2. toRefs 会将原来响应式对象转换为普通对象,并将内部所有 property 都 ref;// ref 和 toRef 都是给一个静态数据实行响应式,转换成 ref 对象。// 由于使用了 toRef,原数据修改后,这里会更新到最新数据。// toRef 是引用操作,当修改数据时,原数据也会被修改;// 响应式操作,使用 ref(),则无法获取原数据的修改信息。// ref 是复制操作,和之前的对象断了关联;// 修改原数据,关联被 toRef 的数据。
2023-04-29 12:06:24
2605
原创 05.ref
/ obj.value 下返回的还是 reactive 的 Proxy,obj 本身还是 RefImpl。// 响应式返回一个“RefImpl”的 ref 对象,值存储在内部的.value 属性上,且可变;// toRef:即将 infoRef 转换成 ref 对象,并将指定的属性绑定到.value 上。PS:当我们要对响应式对象解构时,属性也是响应式 ref,就适合使用 toRefs,手册有例子;// toRef 将响应式对象转换为普通对象,内部的属性转化为 ref 对象。// 输出 name。
2023-04-27 08:48:54
648
Sam Altman专访:GPT-4没太让我惊讶,ChatGPT则让我喜出望外
2023-03-30
30页论文!俞士纶团队新作:AIGC全面调查,从GAN到ChatGPT发展史
2023-03-30
普通人如何用ChatGPT搞钱?
2023-03-29
ChatGPT开始威胁程序员的核心能力了!
2023-03-29
ChatGPT 当中的“GPT”是什么意思?
2023-03-29
这个Python模块太厉害了,一行代码生成Tableau可视化图表
2023-03-28
ChartGPT延伸出来的投资机会
2023-03-28
杂谈:ChartGPT之谣言止于尝试
2023-03-28
ChatGPTGPT-3.5+ChatGPT:图解概述
2023-03-26
ChartGPT4的新思考
2023-03-26
ChatGPT,我们该怎么看
2023-03-26
ChatGPT的技术基础分析
2023-03-26
真心“实”意 - Splunk With ChartGPT
2023-03-26
ChatGPT如此强大便捷,程序员可能要失业了!
2023-03-26
浅谈ChatGPT的未来
2023-03-26
Exmlrpc.dll文件下载,解决找不到Exmlrpc.dll的问题
2023-03-26
OFFSET从入门到进阶,再也不怕这个函数了
2023-03-25
OFFSET进阶案例,最后一个直接看不懂!
2023-03-25
OFFSET函数-Excel最难的函数,太抽象了
2023-03-25
OFFSET用得好,发量一点不见少
2023-03-25
详解OFFSET函数 OFFSET函数可以给我们提供了一个对单元格区域的引用,从给定的起始单元格开始,移动到给定的单元格并扩展给
2023-03-25
OFFSET函数的四个典型用法
2023-03-25
OFFSET 函数进行介绍 与 VLOOKUP 一样,OFFSET 也是查找函数
2023-03-25
Excel中offset函数详解及其应用
2023-03-25
OFFSET,Excel最强大的函数之一,就是学起来太难了,很抽象!
2023-03-25
OFFSET这个必备函数,为了大家都能听懂,特意花了几个小时制作了函数模型,采用可视化,动画教学 参数变动,区域变化,公式变动
2023-03-25
OFFSET,动态统计函数之王,长文预警,新手勿看!
2023-03-25
再谈OFFSET函数,进阶一丢丢吧!
2023-03-25
知识生产流程大!颠!覆!ChapGPT-4你会用了吗?
2023-03-25
微信小程序,毕业设计,地图定位
2023-03-24
史上最牛的AI人工智能ChatGPT项目讲解
2023-03-24
偷偷收藏!这些大厂数据科学家都练习过的数据集,让你零基础入门DS/BA!
2023-03-24
只有20次的免费体验,我是怎么免费使用Notion AI 3个月的
2023-03-23
6 种使用 Notion AI 的方法
2023-03-23
手把手教你注册Notion AI,超级详细
2023-03-23
交给它就好-我是如何用Notion Al帮助我工作的
2023-03-23
小白实操教程带你玩转Notion AI
2023-03-23
超越ChatGPT的笔记软件 - Notion Ai, 5大核心功能简介
2023-03-23
使用 Notion AI 学习一门新语言
2023-03-23
Notion AI:我真的被它惊呆了,简直太棒了
2023-03-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人