sina
5 سال پیش توسط sina مطرح شد
10 پاسخ

عدم شناسایی متد contain

با سلام من هنگام که از طریق یک کنترلر مقدار role به متد hasrole مربوط به مدل user ارسال می کنم
با ارور زیر مواجح میشم

Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsToMany::contains()

User.php

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function article()
    {

        return $this->hasMany(Article::class);
    }

    public function roles()
    {

        return $this->belongsToMany(role::class);
    }

    public function hasRole($role)
    {
        if (is_string($role)) {
            return $this->roles()->contains('name', $role);
        }

    }
}

اینم کد مربوط به کنتر لر

return Auth()->user()->hasrole('maneger');

@hesammousavi
لطفا راهنمایی کنید


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
1

این کاملا مشخصه عزیزم شما اومدید توی کنترلر گفتید

return Auth()->user()->hasrole('maneger');

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


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
1

کاملا دلیل مشخصه چون شما بی دقتی کردید .
کد زیر رو جایگزین کنید حل میشه

       return $this->roles->contains('name', $role);

sina
@sinkoosha 5 سال پیش مطرح شد
0

این کدم تست کرده بودم ولی متاسفانه

The Response content must be a string or object implementing __toString(), "boolean" given.

با چنین اروری مواجح شدم


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
1

قدم به قدم چک کنید لطفا مثلا چک کنید

dd($this->roles) 

چی بر میگردونه اسم کلاس Role شما حرف اولش با حرف بزرگ هست یا کوچیک ؟


sina
@sinkoosha 5 سال پیش مطرح شد
0

جناب موسوی تا اینجا بدون مشکل بر میگرده

return $this->roles->first();

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

لینک زیر رو با dd تست بگیرید

$this->roles->contains('name', $role);

sina
@sinkoosha 5 سال پیش آپدیت شد
0

جالب شد true برگردوند
تست کردم اصلا نمی تونه true برگردونه


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
1

این کاملا مشخصه عزیزم شما اومدید توی کنترلر گفتید

return Auth()->user()->hasrole('maneger');

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


sina
@sinkoosha 5 سال پیش مطرح شد
0

خیلی ممنون از راهنماییتون


mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 5 سال پیش مطرح شد
0

@hesammousavi
شما خیلی حوصله داری :D
موفق باشی


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
1

@khanzadimahdi
همه که از اول حرفه‌ای نبودن و نیستن، خود شما چقدر به مشکلاتی خوردی که برای بقیه بدیهی بوده ؟
بنابراین بجای اینکه به بقیه بگین این چیه پرسیدی، یه حرف‌های از این دست یبار قضیه رو از دید اونا ببینین خیلی‌ها واقعا با چیزهای که شما ساده میبینین مشکل دارن .


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

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