Laravel与GraphQL有个约会(四)-数据库名与模型方法重名问题

平时在定义模型的时候可能会出现模型方法与数据库字段重名的问题:

如下面这种情况:

Clipboard Image.png

Clipboard Image.png

上面这种调用方法是使用数据库字段还是使用模型方法呢?如果数据库字段名没有的话,就是使用模型方法。如果刚好两者都存在会先去使用数据库字段,但是如果像下面这样强制调用模型方法。

Clipboard Image.png

关于上面这种情况Laravel文档中提过,属于动态属性的范畴:

Clipboard Image.png

下面我们一起来看Laravel底层是怎么处理刚才我们遇到的情况的吧:

当我们访问User模型的avatar属性,但是User模型中不存在这个属性。这时魔术方法出场了,_get().当读取不可访问属性的值时,__get()会被调用.最终跟踪到Model类中的_get()方法:

Clipboard Image.png

Model与User是继承关系。我们看到_get()魔术方法中又调用了getAttribute()

下面方法位于Illuminate\Database\Eloquent\Concerns\HasAttributes.php中是一个trait

Clipboard Image.png

注意getRelationshipFromMethod()方法:

Clipboard Image.png

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容