首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用未定义方法laravel 6

调用未定义方法laravel 6
EN

Stack Overflow用户
提问于 2020-07-09 08:56:40
回答 3查看 1.1K关注 0票数 0

我是新来的laravel,我正试图为登录的用户获取一个化身,但我不断地得到一个错误。

对未定义方法Illuminate\Database\Eloquent\Relations\HasOne::getAvatar()的调用(View: D:\PI\Project\crud\resources\views\layouts\includes\navbar.blade.php) )

这是我的看法

代码语言:javascript
复制
<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>

是我的控制器

代码语言:javascript
复制
public function profile($id)
{
    $mhs = Mahasiswa::find($id);
    return view('admin.profile', ['mhs' => $mhs]);
}

Mahasiswa模型

代码语言:javascript
复制
<?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']);
    }
}

用户模型

代码语言:javascript
复制
public function mahasiswa()
{
    return $this->hasOne(Mahasiswa::class);
}
EN

回答 3

Stack Overflow用户

发布于 2020-07-09 09:03:30

你好,你在打电话给关系,就像这样

代码语言:javascript
复制
auth()->user()->mahasiswa->getAvatar()
票数 1
EN

Stack Overflow用户

发布于 2020-07-09 09:02:02

您的错误在于:

代码语言:javascript
复制
auth()->user()->mahasiswa()->getAvatar()

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

试试这个:

代码语言:javascript
复制
auth()->user()->mahasiswa->getAvatar()
票数 0
EN

Stack Overflow用户

发布于 2020-07-09 09:04:50

问题是,如果对关系使用函数表示法,则返回一个QueryBuilder对象。因此,auth()->user()->mahasiswa()返回查询生成器。然后,当您执行->getAvatar()时,它试图调用查询生成器上的函数,显然它不在那里。

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

代码语言:javascript
复制
auth()->user()->mahasiswa->getAvatar()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62811129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档