A few words before
I know that you can append variables to model arrays and json representations by using the
protected $appends = ["your", "vars", "here"]; array. But imagine the following situation:
Our use case would be a fictional game or similiar:
Imagine that we have a
User model that holds simple information about an (human) user, like the full name, address and so on.
Now, we also have a
Faction model that represents the faction/origin/guild/… of this user.
Faction model is eager-loaded when retrieving users, because the Faction name is wanted almost every time when displaying the user information.
User also has
DailyStatistics, which holds some information about their daily scores (simple points would be enough).
Because I want to know the points of the a faction, which is the sum of the user points, I thought about appending a new variable
getTotalPointsAttribute function would look like this:
Everytime when we retrieve a user now, the eager-loaded faction would also want to calculate the
totalPoints attribute. That means, that we have a lot of overhead per user.
Is there a way to avoid situations like this? Can I “conditionally” append variables? Are properties calculated when they are hidden?
I tried to wrap the
totalPoints variable in a simple function, instead of an accessor instead. The problem is, that Frontend-Frameworks like VueJS would need access to the
totalPoints variable (or to an endpoint to retrieve that value, but this solution is the least favorable).