دیروز توی یه پروژه Laravelیی از پیش نوشته شده به یه موضوع جالبی برخوردم.
برنامه نویس وقتی با eloquent از یک جدول لیستی یا رکوردی رو میگرفته، علاوه بر ستون های اون جدول، به چندتا property اضافه هم نیاز داشته که با استفاده از مقادیر ستون های اون رکورد تولید کنه. مثلا فرض کنید ما توی جدولمون تاریخ تولد کاربر رو ذخیره می کنیم و علاوه بر تاریخ تولد نیاز داریم سن کاربر هم برگردونیم.
حالا توی این پروژه که همچنین نیازمندی وجود داشت، اومده بودن یه mapper انداخته بودن توی لیست گرفته شده از دیتابیس و اون propertyهای اضافه رو به ازای هر رکورد ساخته بودن. خب این کار باعث میشه ما هم اصل DRY (Don’t Repeat Yourself) رو رعایت نکنیم و هم اینکه به خاطر ساختن یک property ساده باید داخل جاهایی که لیست داریم، یه حلقه بنویسیم و طبعا باعث کندتر شدن سرویسی که نوشتیم میشه. حالا راه حلی که Laravel در نظر گرفته ویژگی append داخل Model هستش. یعنی توی آرایه append کلیدهای اضافه ای که باید برگردونده بشن رو تعریف میکنیم و داخل متدی به فرمت نام get+{appendName}+Attribute مشخص میکنیم که اون property اضافه به شکل ساخته بشه. با این کار هر موقع که لیستی یا یک رکورد مشخص از جدولمون به واسطه Model دریافت میشه، به صورت اتوماتیک appendها هم به عنوان کلید جز propertyها هستن.

#laravel
#php


ترجمه:

Yesterday, I came across an interesting topic in a pre-written Laravel project.
When the programmer takes a list or a record from a table with eloquent, in addition to the columns of that table, he also needs some additional properties to generate a record using the values ​​of the columns of that table. For example, suppose we store the user’s date of birth in our table, and in addition to the date of birth, we also need to return the user’s age.
Now, in this project, there was also a requirement, a mapper had been added to the list taken from the database and those additional properties had been created for each record. Well, this makes us not follow the principle of DRY (Don’t Repeat Yourself) and because of creating a simple property, we have to write a loop inside the places where we have a list, and of course it slows down the service we wrote. Now, the solution that Laravel has considered is the append feature inside the Model. That is, in the append array, we define the additional keys that must be returned, and in the method we specify the name format get+{appendName}+Attribute so that the added property will be created in the form. With this, every time a list or a specific record is received from our table through Model, appends are automatically included as keys among properties.

#laravel
#php