加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Laravel雄辩模范的领域

发布时间:2020-12-14 19:41:04 所属栏目:大数据 来源:网络整理
导读:我是Laravel和雄辩的新人,所以请原谅我,如果这是一个完全愚蠢的问题. 我一直在研究如何在文档 here和另一个教程 here(在使用雄辩ORM部分创建模型)中创建模型,我注意到表中的实际字段从未被提及,除非有某些东西具体关于它们(例如与另一个表有关系,或者不需要
我是Laravel和雄辩的新人,所以请原谅我,如果这是一个完全愚蠢的问题.
我一直在研究如何在文档 here和另一个教程 here(在使用雄辩ORM部分创建模型)中创建模型,我注意到表中的实际字段从未被提及,除非有某些东西具体关于它们(例如与另一个表有关系,或者不需要大量分配,或者如果需要从JSON输出中隐藏)

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

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

谢谢.

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

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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读