隐藏字段
我在项目遇到的情景是,当使用关联模型获取数据的时候,比如产品模型和图片模型,通过产品模型来关联图片模型,这个时候我只需要图片模型的图片地址字段,其他的字段不让产品模型看到;以这个场景为实例,我们通过代码实现
我们发现上图红色框里的内容,你不想显示其他字段,就在hidden数组里填写目标字段,这样写的一个弊端,其他模型在调用图片模型的时候,这些字段也不会显示,他是全局的。
构建读取器
我们为什么要创建读取器?我们在我们正常的业务中,比如要修改我们读取字段数据,我们传统的做法是将数据获取出来,在对数据进行修改。现在有了读取器我们没有必要这样做,我们在业务逻辑里面只针对数据,不去处理数据。laravel给我们提供了方便
由上图红色的框里的内容所示,比如我们修改图片的路径,图片路径的字段img_url,这个时候构造器函数的声明是getImgUrlAttribute,注意后面必须跟Attribute这是laravel的规定,函数里面的$value就是当前字段的值,你就可以对值进行修改。还有就是我们也可以其他字段值来动态修改当前字段的值
当from的字段为1的时后我们这才修改图片的路径,注意:这些字段和值的来源是,当我们调用模型的时候,模型会自动将我们数据表的字段和值获取出来,构造器修改字段的值也是全局的,在任何一个关联模型都可以用。
关联模型可以对所关联模型的值进行改变
这句话可能听起来有点绕,我来解释一下。我通过一个场景进行解释,比如我们经常看到的商品详情,它里面介绍大多数以图片的形式展示,这些图片再添加的时候是随便传的,这个时候图片后面有一个排序字段,如果你不按照排序字段进行排序,你所获取的图片是乱的,介绍都是乱的。这个时候我们通过关联模型将图片模型的数据进行排序组装,按照我们想要的格式返回。
laravel将关联模型的数据拼接到当前模型数据的后面是通过with函数,with可以接收一个数组,数组里面的就是关联模型的函数,比如一对一关联函数,我们可以通过‘.’的方式来获取关联模型他所关联的模型,
也就是这样获取,我们要改变模型里面的值,我们就要在with函数里面写一个匿名函数来处理模型的数据,查询构造器