lumen和lumenlaravell有什么本质区别

Laravel 还是 Lumen?相信有不少人在纠结这个问题,相对来讲,我并不推荐使用 Lumen,因为作者的更新维护很明显还是偏重于 Laravel 的,还有一个理由就是 Laravel 已经包含了 Lumen 的全部功能。

不要盲目追求性能,见到很多朋友出现的一个通用现象,在使用 Lumen 的时候各种想办法解决在 Laravel 里已经有的东西,比如 Session、模版引擎等,首先在姿势上就已经不正确了,它本就不是为了这种场景而生的东西。

最核心的一点很多人没有注意到,网上各种框架性能对比,都是在特别小的逻辑环境下测试的,但是,我们的应用远比它们复杂得多。所以,当你把一个应用开发完成时再来对比,你就发现差异并没有那么大了。在这种情况下我更倾向于更快的开发速度,更低的维护成本。

很多人一讨论性能就把这个问题的讨论点始终放在框架与语言上,这是错误的。同样的语言,同样的框架,不同编码水平的人,写出同样功能,性能也可以差几十上百倍。举一个真实的特别典型的例子,之前交流群里一哥们问了一个问题:为啥我就一个首页文章列表,Laravel 跑起来这么慢啊?这框架性能也太差了吧?结果点开他贴图一看,debugbar 上显示这次请求一共产生了43 条 SQL ……,他在循环里查询作者信息……,后来告诉他细看文档使用正确姿势以后,3 条 SQL 解决了问题。

关注结构,好的设计模式能够很好的帮你解决项目各模块间的复杂关系与交错的逻辑。网上有很多不错的模式实践,以及很多朋友基于 Laravel 做的开源项目也都有着不错的代码结构设计,比如 Summer 的 phphub5,当然了,这里也厚着脸皮推荐一下我写的一些轮子: 。

看到很多朋友在 Laravel 里写着面条式的代码,挺心疼的,建议大家去仔细阅读并领会 Laravel 作者写的那本书《From Apprentice To Artisan》,开源中国有朋友翻译,叫 。里面有很多关于 Laravel 作者对框架设计的思维模式,以及很多编码及应用架构方面的分享。

Laravel 本身就很美,加上正确的去使用,才能在我们的应用里发挥它的长处,避免面条式的代码,合理的拆分逻辑,才是我们应该努力学习与改进的地方,而不是整天纠结选什么框架与性能好坏。很多人说 Laravel 入门太难,不像某些框架那么易上手。连 PHP 基本语法都用不熟悉的人,确实上不了手,毕竟,这样的人就像木偶,需要一个人给他定死步骤拉着走才能知道干什么。

使用Eloquent ['el?kw?nt] 时,数据库查询构造器的方法对模型类也是也用的,使用上只是省略了DB::table('表名')部分。

在模型中使用protected成员变量$table指定绑定的表名。

Eloquent 假设每个表都有一个名为id的主键,可以通过$primaryKey成员变量覆盖该字段名称,另外,Eloquent假设主键字段是自增的整数,如果你想用非自增的主键或者非数字的主键的话,必须指定模型中的public属性$incrementing为false。

方法all用于返回模型表中所有的结果


也可以使用get方法为查询结果添加约束

可以看到,查询构造器的方法对模型类也是可以使用的

该对象的方法有很多,这里只列出一小部分,更多方法参考API文档 和。

对大量结果分段处理,同样是使用chunk方法


使用findfirst方法查询单个结果,返回的是单个的模型实例

// 通过主键查询模型...

使用find方法也可以返回多个结果,以Collection对象的形式返回,参数为多个主键

如果没有捕获这个异常的话,laravel会自动返回给用户一个404的响应结果,因此如果希望找不到的时候返回404,是可以直接使用该方法返回的

与查询构造器查询方法一样,可以使用聚集函数返回结果,常见的比如maxminavgsumcount

分页查询可以直接使用paginate函数

插入新的数据只需要创建一个新的模型实例,然后设置模型属性,最后调用save方法即可


在调用save方法的时候,会自动为created_atupdated_at字段设置时间戳,不需要手动指定

使用create方法可以执行批量为模型的属性赋值的插入操作,该方法将会返回新插入的模型,在执行create方法之前,需要先在模型中指定fillableguarded属性,用于防止不合法的属性赋值(例如避免用户传入的is_admin属性被误录入数据表)。

指定$fillable属性的目的是该属性指定的字段可以通过create方法插入,其它的字段将被过滤掉,类似于白名单,而$guarded则相反,类似于黑名单。

执行create操作就只有白名单或者黑名单之外的字段可以更新了

firstOrCreate方法用来使用给定的列值对查询记录,如果查不到则插入新的。fristOrNewfirstOrCreate类似,不同在于如果不存在,它会返回一个新的模型对象,不过该模型是未经过持久化的,需要手动调用save方法持久化到数据库。

// 使用属性检索flight,如果不存在则创建...
// 使用属性检索flight,如果不存在则创建一个模型实例...

方法save不仅可以要用来插入新的数据,也可以用来更新数据,只需先使用模型方法查询出要更新的数据,设置模型属性为新的值,然后再save就可以更新了,updated_at字段会自动更新。

也可使用update方法对多个结果进行更新

使用delete方法删除模型

上述方法需要先查询出模型对象,然后再删除,也可以直接使用主键删除模型而不查询,使用destroy方法

使用约束条件删除,返回删除的行数

软删除是在表中增加deleted_at字段,当删除记录的时候不会真实删除记录,而是设置该字段的时间戳,由Eloquent模型屏蔽已经设置该字段的数据。

要判断一个模型是否被软删除了的话,可以使用trashed方法


如果模型被软删除了,普通查询是不会查询到该结果的,可以使用withTrashed方法强制返回软删除的结果

// 关联操作中也可以使用

查询到软删除的模型实例之后,调用restore方法还原

// 关联操作中也可以使用
强制删除(持久化删除)

上述操作后,数据会被真实删除。


我要回帖

更多关于 lumenlaravel 的文章

 

随机推荐