راکت
حل شده

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

10 پاسخ

با سلام من هنگام که از طریق یک کنترلر مقدار 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
لطفا راهنمایی کنید

ثبت پرسش جدید

پاسخ‌ها

10
حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

بهترین پاسخ

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

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

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

حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

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

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

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

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

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

شاید پاسخ شما همین‌جا باشد

حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

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

dd($this->roles) 

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

sina
sina
@sinkoosha

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

return $this->roles->first();
حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

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

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

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

sina
sina
@sinkoosha

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

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

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

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

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