php - laravel Eloquent 有和没有实例
问题描述
我是新手Laravel
。
我想知道两者的区别
- 实例化一个模型类。
$example = new modelClass();
$example->first();
- 无需实例化模型类。
$example = ModelClass::all();
谁能帮忙。谢谢。
解决方案
不同之处在于,当您使用new运算符时,您将获得一个模型类的实例,该实例具有所有可用的方法,但属性为空。当你调用这个空模型实例的first()方法时,由于 Eloquent 是活动记录 ORM,Model类让它变得很神奇,调用 sql,填充属性并返回相同的模型,但已经不是空的属性。
同时,当您使用模型类作为外观进行操作时,系统再次在引擎盖下解析模型类的实体,然后调用同一初始化对象的所有方法,如 int 第一个示例,但所有方法都返回不是模型实例,它返回模型集合 - 像数组一样使用的对象,因此您可以迭代,但有一堆附加函数。
所以,如果你想知道调用门面或初始化对象有什么区别,除了系统会为你初始化对象外,没有什么区别,但是如果你正在寻找灵活的系统,你会意识到使用门面,因为要调用外观,您应该直接调用类,而不是抽象,而对于模型,您可以创建工厂实例并像抽象一样调用它。
但是,对于新的,你可以使用门面,但是当你深入 OOP 时,请记住上面的事情!
推荐阅读
- javascript - Reducer 被触发但订阅功能没有获取更改 [React-Redux]
- python - 从python数据框中的第二个下划线后获取数据?
- scala - 尝试使用 DataSourceV2 将 DataFrames 保存到 Phoenix 时出现“数据源不是 org.apache.phoenix 的成员”
- git - 使用 Git 输入远程名称;我该如何解决?
- node.js - 如何在mongodb中保存日期类型dd/mm/yyyy格式
- android - 阻止文本视图离开屏幕
- javascript - 如何让图像的不透明度随着时间的推移而上升,而不是立即使用 css
- node.js - 将 Node 服务与 Office365 邮件交换服务器连接时出现问题
- git - 从主分支我创建了一个名为 release1 的新分支
- python - 如何在 Python 中创建一个包含类实例的对象?