我是新来的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]);
}Mahasiswa模型
<?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);
}发布于 2020-07-09 09:03:30
你好,你在打电话给关系,就像这样
auth()->user()->mahasiswa->getAvatar()发布于 2020-07-09 09:02:02
您的错误在于:
auth()->user()->mahasiswa()->getAvatar()您将您的关系称为方法(即mahasiswa() ),而不是属性(mahasiswa)。这将返回一个查询生成器实例,而不是您正在寻找的模型。
试试这个:
auth()->user()->mahasiswa->getAvatar()发布于 2020-07-09 09:04:50
问题是,如果对关系使用函数表示法,则返回一个QueryBuilder对象。因此,auth()->user()->mahasiswa()返回查询生成器。然后,当您执行->getAvatar()时,它试图调用查询生成器上的函数,显然它不在那里。
Laravel将为您返回关系的方法做一些“魔法”。如果您调用auth()->user()->mahasiswa,它将返回关系的结果并返回一个Mahasiswa对象。所以你应该打电话给:
auth()->user()->mahasiswa->getAvatar()https://stackoverflow.com/questions/62811129
复制相似问题