Вызов неопределенного метода laravel 6 - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в laravel, я пытаюсь получить аватар для пользователя, который вошел в систему, но все время получаю сообщение об ошибке.

Вызов неопределенного метода Illuminate \ Database \ Eloquent \ Relations \ HasOne :: getAvatar () (View: D: \ PI \ Project \ crud \ resources \ views \ layouts \ includes \ navbar.blade. php)

вот мое мнение

<li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown"><img src="{{auth()->user()->mahasiswa()->getAvatar()}}"
    class="img-circle" alt="Avatar">
    <span>{{auth()->user()->name}}</span> <i class="icon-submenu lnr lnr-chevron-down"></i></a>
    <ul class="dropdown-menu">

        <li><a href="/admin/{{$mhs->id}}/profile"><i class="lnr lnr-user"></i> <span>My Profile</span></a></li>
        <li><a href="#"><i class="lnr lnr-envelope"></i> <span>Message</span></a></li>
        <li><a href="#"><i class="lnr lnr-cog"></i> <span>Settings</span></a></li>
        <li><a href="/logout"><i class="lnr lnr-exit"></i> <span>Logout</span></a></li>
    </ul>
</li>

это мой контроллер

public function profile($id)
{
    $mhs = Mahasiswa::find($id);
    return view('admin.profile', ['mhs' => $mhs]);
}

Модель Махасисва

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\User;

class Mahasiswa extends Model
{
    protected $table = 'mahasiswa';
    protected $fillable = ['nama', 'npm', 'kelas', 'fakultas', 'program_studi', 'email', 'avatar', 'document', 'user_id'];
public function getAvatar()
{
    if(!$this->avatar){
        return asset('images/default.png');
    }

    return asset('images/'.$this->avatar);
}

public function user()
{
    return $this->belongsTo(User::class)->withDefault(['avatar' => 'default.png']);
    }
}

Модель пользователя

public function mahasiswa()
{
    return $this->hasOne(Mahasiswa::class);
}

Ответы [ 3 ]

1 голос
/ 09 июля 2020

Здравствуйте вы звоните в отношения, попробуйте вот так

auth()->user()->mahasiswa->getAvatar()
0 голосов
/ 09 июля 2020

Проблема в том, что вы возвращаете объект QueryBuilder, если используете нотацию функций в своих отношениях. Итак, auth()->user()->mahasiswa() возвращает построитель запросов. Затем, когда вы выполняете ->getAvatar(), он пытается вызвать функцию в построителе запросов, а ее явно нет.

Laravel сделает несколько "magi c" для ваших методов, возвращающих отношения . Если вы вызовете auth()->user()->mahasiswa, он вернет результат отношения и вернет вам объект Mahasiswa. Итак, вам следует позвонить:

auth()->user()->mahasiswa->getAvatar()
0 голосов
/ 09 июля 2020

Ваша ошибка здесь:

auth()->user()->mahasiswa()->getAvatar()

Вы называете свои отношения методом (т.е. mahasiswa()), а не свойством (mahasiswa). Это вернет экземпляр построителя запросов, а не модель, которую вы искали.

Попробуйте следующее:

auth()->user()->mahasiswa->getAvatar()
...