如何解决在Laravel中的index.blade中使用多态关系
在此之前,我不使用多态关系。我仅对每个表(例如Admin,Buyer和Contractor)使用user_id
来将其与User表相关联。现在,我可以使用多态关系,因为我需要使用导航栏中这3个表中的name
和avatar
列。每次用户登录帐户时,他们都会在导航栏上看到其名称和头像。
用户表
id
role
email
typable_id
typable_type
购买者表
id
name
address
phone_no
email
avatar
User.php
public function typable()
{
return $this->morphTo();
}
Buyer.php
public function user()
{
return $this->morphMany(User::class,'typable');
}
这已经解决了我的问题。但是现在的问题是,如何为索引视图使用多态关系?这是我使用user_id时使用的上一个查询。
BuyerController.php
public function index(Request $request)
{
if(Auth::user()->role == 'buyer')
{
$buyers = Buyer::where('user_id','=',Auth::id())->first();
return view('buyers.index',['buyer'=>$buyers]);
}
}
index.blade.php
<div class="profile-main">
<img src="http://localhost:8000/storage/images/{{auth()->user()->typable->avatar}}" width="100" length="100" class="img-circle" alt="Avatar">
<h3 class="name">{{$buyer->name}}</h3>
</div>
<div class="profile-detail">
<div class="profile-info">
<h4 class="heading"><b><center>Resident's Details</center></b></h4>
<ul class="list-unstyled list-justify">
<li><b>Buyer ID: </b>{{$buyer->buyer_id}}</li>
<li><b>Name: </b>{{$buyer->name}}</li>
<li><b>Address: </b>{{$buyer->address}}</li>
<li><b>Phone Number: </b>{{$buyer->phone_no}}</li>
<li><b>Email: </b>{{$buyer->email}}</li>
</ul>
</div>
<div class="text-center"><a href="/buyer/{{$buyer->id}}/edit" class="btn btn-primary">Edit Profile</a></div>
当我使用买家的帐户登录时,这是我得到SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_id' in 'where clause' (SQL: select * from
个买家where
user_id = 8 limit 1)
和Trying to get property 'name' of non-object
的错误。
解决方法
尝试一下:
$buyers = Buyer::find(Auth::user()->typable_id);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。