我有台车。该表具有字段-created_by和edited_by。每次创建或编辑车辆时,该特定用户的ID都会保存到此列中。 在显示该表详细信息的显示视图中,我想显示用户名而不是ID。我在这里想念什么或做错了什么?
与用户相关的车辆模型:
class Vehicle extends Model
{
public function customer(){
return $this->belongsTo('App\Customer','customer_id');
}
public function user(){
return $this->belongsTo('App\User','edited_by');
}
}
显示数据的控制器:
public function show($id)
{
$vehicle = Vehicle::find($id);
$files = File::where('vehicle_id',$id);
return view('vehicles.show')->with('vehicle',$vehicle)
->with('files',$files);
}
查看
<tr>
<th>Created By</th>
<td>{{$vehicle->user->name}}</td>
</tr>
<tr>
<th>Last Edited By</th>
<td>{{$vehicle->user->name}}</td>
</tr>
我建立了很多关系的用户模型:
class User extends Authenticatable
{
public function vehicles(){
return $this->hasMany('App\Vehicle');
}
}
使用hasmany,我可以显示created_by或edited_by名称。如何显示created_by和edited_by名称?
答案 0 :(得分:2)
由于只有用户id
,因此必须从数据库中获取用户名。
在模型中,您可以添加Accessor
来实现此目的。
class Vehicle extends Model
{
// rest of the code
public function getCreatedByNameAttribute()
{
return User::where('id', $this->created_by)->pluck('name')->first();
}
}
您可以按以下方式访问created by users name
。
<tr>
<th>Created By</th>
<td>{{$vehicle->created_by_name}}</td>
</tr>
用edited_by
如果您想使用关系来做到这一点。
注意:要这样做,必须在“ created_at”上定义外键
列到user
class Vehicle extends Model
{
// rest of the code
public function creator()
{
return $this->belongsTo(User::class, 'created_at', 'id');
}
}
然后您可以按以下方式访问它
<tr>
<th>Created By</th>
<td>{{$vehicle->creator->name}}</td>
</tr>
答案 1 :(得分:2)
您当前在Vehicle模型上的关系与编辑器匹配。为了使创建者获得相同的效果,您可以创建与User模型的另一个关系,并将其传递给created_by
列
class Vehicle extends Model
{
public function customer(){
return $this->belongsTo('App\Customer','customer_id');
}
public function creator(){
return $this->belongsTo('App\User','created_by');
}
public function editor(){
return $this->belongsTo('App\User','edited_by');
}
}
在您看来,您可以使用$vehicle->creator->name
或$vehicle->editor->name