محمد قربانی
4 سال پیش توسط محمد قربانی مطرح شد
6 پاسخ

پاس دادن مقدار به مدل و اضافه کردن به کالکشن

سلام دوستان؛ خسته نباشید، میخواستم بدونم راهی هست که یه مقدار رو به مدل ارسال کنیم و پس از محاسبه یه مقداری اپند بشه به دیتای خروجی، با یه مثال بهتر توضیح میدم، مثلا کاربران یه لوکیشن واسشون ثبت میشه توی دیتابیس، و ما یه لوکشینی داریم و میخوایم همه کاربران رو نسبت به این نقطه فاصلشون رو حساب کنیم، حالا میخوام بدونم میشه این لوکیشن رو به مدل ارسال کرد و با لوکیشن کاربر محاسبه صورت بگیره و فاصله در دیتای خروجی اپند بشه؟

البته میدونم که میشه همشو گرفت و یه فور زد روش و اینو به دیتا اضافه کرد، ولی میخوام ببینم این شکلی که من گفتم امکان پذیر هست یا نه؟ اگه هست به چه شکل؟

ممنون از لطف دوستان


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

درود

ابتدا یک accessor در مدل مورد نظر تعریف کنید:

class User extends Model
{

    public function getDistanceAttribute()
    {
    //  $output = logic for calculating distance;

        return $output;
    }
}

سپس پراپرتی appends رو داخل مدل به شکل زیر مقداردهی کنید:

protected $appends = ['distance'];

محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 4 سال پیش مطرح شد
0

@ali.bayat

ممنون اقای بیات، تشکر، این مورد که میدونم، سوال منو متوجه نشدین فک کنم، میخوام یه لوکشین رو پاس بدم به مدل و بگم با لوکیشن کاربرا محاسبه کنه و یه پراپرتی به اسم distance رو مقدار دهی کنه، شبیه scope ها که میشه یه مقدار رو فرستاد به مدل و کوئری زد، به این شکل میشه؟


TEFO
تخصص : لاراول
@tefo.ha27 4 سال پیش مطرح شد
1

اینجوری که من متوجه شدم شما میخاین یه کاربر فاصله ش با بقیه کاربرا مشخصی بشه
اولا باید بینشون رابطه وجود داشته باشه(مثلا اسم رابطه friends هستش)


public function getDistanceFromFriendsAttribute()
{
    return $this->friends->map->append('distance');
}
public function getDistanceAttribute()
{
//  $output = logic for calculating distance;

    return $output;
}

اگه هم شرط محاسبه دیتا هست میتونین با استفاده از mutator ها این کارو انجام بدین به این شکل

public function setDistanceAttribute($value)
{

    $this->attributes['distance'] = $value; // اینجا باید کاراتونو انجام بدین برای محاسبه
}

محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 4 سال پیش مطرح شد
0

@tefo.ha27
ممنون، ینی با این روش فاصله همه کاربرا نسبت به یه نقطه درمیاد؟این نقطه متغییره، و فاصله همه کاربرا نسبت به این میخوام دربیاد


TEFO
تخصص : لاراول
@tefo.ha27 4 سال پیش مطرح شد
1

بله دقیقا فقط این attribute که نوشتم یعنی distanceFromFriends (یا distance_from_friends) باید append کنین تا بتونین ازش استفاده ببرین


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 4 سال پیش مطرح شد
0

@tefo.ha27

مممنون، تست کنم ببینم چطو میشه، لطف کردین


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام