【问题标题】:Call to undefined method laravel 6调用未定义的方法 laravel 6
【发布时间】:2020-07-09 08:56:40
【问题描述】:

我是 laravel 的新手, 我正在尝试为已登录的用户获取头像,但我不断收到错误消息。

调用未定义的方法 Illuminate\Database\Eloquent\Relations\HasOne::getAvatar()(查看: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);
}

【问题讨论】:

    标签: laravel laravel-blade eloquent-relationship


    【解决方案1】:

    你好,你是调用关系,试试这样

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

    【讨论】:

      【解决方案2】:

      你的错误在这里:

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

      您将您的关系称为方法(即mahasiswa())而不是属性(mahasiswa)。这将返回一个查询构建器实例,而不是您正在寻找的模型。

      试试这个:

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

      【讨论】:

        【解决方案3】:

        问题是,如果您在关系上使用函数表示法,您将返回一个 QueryBuilder 对象。所以auth()-&gt;user()-&gt;mahasiswa() 返回查询生成器。然后当您执行-&gt;getAvatar() 时,它会尝试调用查询生成器上的函数,但显然不存在。

        Laravel 会为你返回关系的方法做一些“魔法”。如果您调用auth()-&gt;user()-&gt;mahasiswa,它将返回关系结果并返回一个Mahasiswa 对象。所以你应该调用的是:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-02
          • 2013-10-23
          • 1970-01-01
          • 1970-01-01
          • 2015-05-31
          • 2016-06-05
          • 2016-09-03
          • 2015-06-10
          相关资源
          最近更新 更多