Laravel отображает имя create_by и edited_by, используя соответствующие идентификаторы - PullRequest
0 голосов
/ 05 октября 2018

У меня есть настольный автомобиль.Эта таблица имеет поля - созданные_представлено_Каждый раз, когда автомобиль создается или редактируется, этот конкретный идентификатор пользователя сохраняется в этом столбце.В представлении представления, где отображаются подробности этой таблицы, я хочу отобразить имя пользователя, а не 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>

Модель пользователя, в которой я поставил отношение hasmany:

class User extends Authenticatable
{
    public function vehicles(){
        return $this->hasMany('App\Vehicle');
    }  
}

Используя hasmany, я могу отобразитьимя созданного или отредактированного.Как я могу отобразить имена созданного и измененного имени?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Ваше текущее отношение к модели транспортного средства соответствует редактору.Чтобы добиться того же для создателя, вы можете создать другое отношение к модели 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

0 голосов
/ 05 октября 2018

Поскольку у вас есть только 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

Если вы хотите сделать это, используя отношения.

ПРИМЕЧАНИЕ: чтобы сделать это, вы должны были определить внешние ключи в столбце «create_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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...