[英]How to use pluck to get specific data from other table in Laravel?
[英]How to use column from other table in Laravel
在我的导航栏上,我想放置用户名和头像。 每次用户登录他们的帐户时,他们都可以在导航栏上看到自己的姓名和头像。 在此之前,名称和头像列在我的用户表中。 现在,我将它们移动到针对每种类型的用户(例如买家、承包商和管理员)的其他表。 两个表都使用user_id列相关联。
用户表
id
role
email
password
买家表
id
user_id
name
avatar
email
承包商表
id
user_id
name
avatar
email
导航栏刀片
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><img src="http://localhost:8000/storage/images/{{auth()->user()->avatar}}"class="img-circle" alt="Avatar <span>{{auth()->user()->name}}</span><i class="icon-submenu lnr lnr-chevron-down"></i></a>
我不应该使用{{auth()->user()->avatar}}
和{{auth()->user()->name}}
因为用户表中不再有name
和avatar
列。 那么,我需要使用什么查询?
这个问题可以通过使用多态关系来解决。 更多关于这里: https : //laravel.com/docs/8.x/eloquent-relationships#one-to-many-polymorphic-relations
如果您的“类型”表中的信息完全相同,您最好只在users
表中添加一个名为type
列。 此列可以是enum
。
如果你想保持你当前的方法,多态关系来拯救你!
您应该从您的buyers
、 contractors
和admins
表中删除user_id
。 相反,您的users
表中将有两个多态列。
您的表格应如下所示:
用户表
id
role
email
password
typable_id - integer
typable_type - string
买家表
id
name
avatar
email
承包商表
id
name
avatar
email
管理员表
id
name
avatar
email
您的模型应如下所示:
用户模型
class User extends Model
{
public function typable()
{
return $this->morphTo();
}
}
买家模式
class Buyer extends Model
{
public function user()
{
return $this->morphMany(User::class, 'typable');
}
}
承包商模型
class Contractor extends Model
{
public function user()
{
return $this->morphMany(User::class, 'typable');
}
}
管理模式
class Admin extends Model
{
public function user()
{
return $this->morphMany(User::class, 'typable');
}
}
您的视图应如下所示:
<a href="#">
<img src="http://localhost:8000/storage/images/{{auth()->user()->typable->avatar}}">
<span>{{auth()->user()->typable->name}}</span>
</a>
您可以根据需要添加任意数量的类型,只需添加另一个表和模型。 您的User
模型现在是可输入的。
更新:
当您需要创建一个新用户时,首先创建typable
,然后创建具有关系函数的用户:
public function create(Request $request)
{
$buyer = Buyer::create([
'name' => $request->name,
'avatar' => $request->avatar,
'email' => $request->email,
]);
$buyer->user()->create([
'role' => 'buyer',
'email' => $request->email,
'password' => bcrypt('system'),
'remember_token' => Str::random(60),
]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.