微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Laravel中效用函数的含义是什么?

美好的一天,我是Laravel的新手,我遇到的并且无法理解的是框架中使用的实用方法,例如,Customer :: all()其中Customer是model或者find :: find .那么,实用方法的重点是什么以及为什么all()和find()都是静态的.

解决方法:

实用功能通常提供某种实用性,即通常仅为了方便而且还可以通过遵循一组步骤来实现的功能.

例如,Model :: find()是一种功能,也可以通过创建查询构建器对象然后执行查询来实现.

Model::getQuery()->where('id', '=', $id)->first();

为方便起见,您可以使用更简单,更直观的Model :: find($id).

它是静态的,因为没有静态是没有意义的.非静态方法需要类的实例,但是在ORM中,类的实例对应于潜在的数据库条目(存在或可能存在).
因此,由于find用于检索数据库条目,因此需要备份数据库条目才能使用它是没有意义的.

简而言之,这意味着,如果执行方法$object = Model :: find(1),您将获得一个模型,该模型对应于具有标识符1的数据库条目.PHP对象与关系的1对1映射宾语.如果对$object进行更改并调用$object-> save(),则更改将保留在数据库中(即$object已存在).另一方面,如果你做$object = new Model(),你将得到一个当前不对应数据库条目的新模型.但是,调用$object-> save()将使该对象对应于新的数据库条目,并且它将相应地更新(即新对象可能存在).如果一个框架要求你创建一个“虚拟”对象只是为了访问一些辅助方法,那么总是有可能(通过遗漏或通过未知的副作用)在该虚拟对象上调用save()并最终填满你的数据库本质上是垃圾.

从中可以看出,如果您不打算将其存储在数据库中,那么在ORM中创建模型实例是没有意义的. Laravel并没有严格遵守这条规则,但总的来说它确实如此,你也应该这样做.

这同样适用于获取所有数据库条目的所有内容.通过要求首先获得一个条目来获取所有数据库条目是没有意义的.

同样适用于上面使用的getQuery,它返回一个查询构建器实例.请注意,大多数人实际上并不使用getQuery,因为当有人使用类似的东西时,它会隐式运行. Model :: where(..)技术上如此Model :: where()也是一个实用程序.我提到这个是因为当你看到像Model :: where(‘id’,$id) – > where(‘name’,$name)之类的东西时,第二个位于 – >之后这意味着它在一个实例而不是静态,但该实例实际上是一个查询构建器实例而不是一个模型实例.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐