php – Laravel雄辩模范的领域

php – Laravel雄辩模范的领域,第1张

概述我是Laravel和雄辩的新人,所以请原谅我,如果这是一个完全愚蠢的问题. 我一直在研究如何在文档 here和另一个教程 here(在使用雄辩ORM部分创建模型)中创建模型,我注意到表中的实际字段从未被提及,除非有某些东西具体关于它们(例如与另一个表有关系,或者不需要大量分配,或者如果需要从JSON输出中隐藏) 这些字段是否在目的上被省略,PHP只是在使用FETCH_OBJ打开的PDO执行查询时添 我是Laravel和雄辩的新人,所以请原谅我,如果这是一个完全愚蠢的问题.
我一直在研究如何在文档 here和另一个教程 here(在使用雄辩ORM部分创建模型)中创建模型,我注意到表中的实际字段从未被提及,除非有某些东西具体关于它们(例如与另一个表有关系,或者不需要大量分配,或者如果需要从JsON输出中隐藏)

这些字段是否在目的上被省略,PHP只是在使用FETCH_OBJ打开的PDO执行查询时添加它们?
如果是的,为什么我们不明确地将这些字段放在模型中?它不能帮助我们知道我们拥有哪些领域,还有诸如PHPStorm等IDE可以d出正确的自动完成字段?

如果实际需要,他们需要有什么访问级别?

谢谢.

雄辩模特中不需要列名(字段).如您所指出的,只需要定义确定模型与其他人的关系的函数.

由于您提到的原因(Laravel执行select *,然后将所有返回的行添加到模型对象作为公共属性),因此不需要包含它们.这是一个称为水合的过程,您可以通过挖掘Laravel来源来确切了解发生的情况.这是一个总结,发生了什么:

>你调用(例如),Users :: find(123);
> Illuminate\Database\Eloquent\Model::find()电话Illuminate\Database\Eloquent\Builder::find()
> find()构造SELECT * FROM用户WHERE ID = 123查询,然后通过调用Illuminate\Database\Eloquent\Builder::first()返回第一个结果
> first()通过调用Illuminate\Database\Query\Builder::take()添加liMIT 1
>然后通过调用Illuminate\Database\Eloquent\Builder::get(),first()设置要检索的列(默认为*).
> get()返回值为Illuminate\Database\Eloquent\Collection,返回值为Illuminate\Database\Eloquent\Builder::getModels()
> getModels()实际执行查询,然后调用Illuminate\Database\Eloquent\Model::newFromBuilder()为每行返回
> newFromBuilder()创建一个新的模型实例,并通过调用Illuminate\Database\Eloquent\Model::setRawAttributes()设置列(字段)

我省略了一些无关紧要的事情,如加载加载来简化进程,但这基本上是每个查询发生的情况.

你提出一个很好的一点,即事先知道这些领域对自动完成有帮助.由于setRawAttributes()的性质,您可以在模型中声明所有列名(字段)(只是确保它们是公共的).虽然(和你的理智),公约是省略它们.此类声明应留给migration files.

经过进一步检查后,事先申报田地是不行的.这是因为实际的属性值存储在$attributes属性中,然后由magic方法__get()访问.这里的麻烦在于,通过预先定义属性,您将在访问字段时阻止__get()被调用.因此,这不是一个选择.

但是,有ways to hint to editors (like PhpStorm) about the existence of properties without explicitly defining them.

总结

以上是内存溢出为你收集整理的php – Laravel雄辩模范的领域全部内容,希望文章能够帮你解决php – Laravel雄辩模范的领域所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1253662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存