🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ فراز صالحی
تفاوت بین متد و پراپرتی
مهرداد سامی حل شده توسط مهرداد سامی

سلام ,

 

زمانی که یک relation بین دو مدل ایجاد می‌کنیم چه تفاوتی بین صدا زدنش به عنوان پراپرتی و متد( رابطه زده شده ) وجود داره ؟

 

مثلا :

trait HasPermission
{
    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }
    public function method()
    {
    	return $this->permissions(); // ??
    }
    public function property()
    {
    	return $this->permissions; // ??
    }
}

مشکل دیگه اینکه متد hasPermission نی که نوشتیم همیشه false بر میگردونه ..

 public function hasPermission(string $permission)
 {
     dd($this->permissions->contains($permission));
 }

سلام 

 

تفاوت این هستش که زمانی که شما به صورت Property صدا میزنید به شما یک نمونه از Collection برمیگردونه و زمانی که به عنوان متد صدا میزنید یک نمونه از Laravel Relation برمیگردونه که هر کدوم متد‌های خاص خودشون رو دارن.

 

در مورد سوال دومتون هم باید بگم که به این خاطر که شما دارید string دریافت میکنید در صورتی که باید یک Object از اون Permission رو دریافت کنید تا بتونید از متد Contains استفاده کنید.

بهترین پاسخ
مهرداد سامی ۰۱ تیر ۱۴۰۰، ۱۷:۲۵