Laravel使用各自的ID显示created_by和edited_by名称

时间:2018-10-05 06:37:43

标签: laravel

我有台车。该表具有字段-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名称?

2 个答案:

答案 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

显示名称