как получить значение внешнего ключа в Laravel - PullRequest
1 голос
/ 29 мая 2020

У меня проблема с Laravel модельными отношениями. Мне нужно позволить пользователям создавать новые грузовики. Однако мне нужно сохранить поле производителя как идентификатор, а не заголовок. Поэтому я решил создать две таблицы (производители и грузовики), которые имеют отношение один ко многим (производители имеют несколько грузовиков, а один грузовик - одного производителя).

Вот файлы миграции. Таблица производителей:

public function up()
{
    Schema::create('manufacturers', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('manufacturer');
        $table->timestamps();
    });
}

Таблица грузовиков:

public function up()
{
    Schema::create('trucks', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('make_id');
        $table->unsignedInteger('year');
        $table->string('owner');
        $table->unsignedInteger('owner_number')->nullable();
        $table->text('comments')->nullable();
        $table->foreign('make_id')->references('id')->on('manufacturers');

        $table->timestamps();
    });
}

Производитель. php модель:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Manufacturer extends Model
{
/**
 * @var string
 */
protected $table = 'manufacturers';

/**
 * @var array
 */
protected $fillable = [
    'manufacturer', 
];

public function trucks(){
    return $this->hasMany(Truck::class);
}
}

Truck. php модель:

namespace App;

use Illuminate\Database\Eloquent\Model;

 class Truck extends Model
 {
 /**
 * @var string
 */
protected $table = 'trucks';

/**
 * @var array
 */
protected $fillable = [
    'make_id', 'year', 'owner', 'owner_number', 'comments',
];

public function manufacturer(){
    return $this->belongsTo(Manufacturer::class);
}
}

Файл контроллера:

public function index()
{
    $trucks = Truck::all();
    return view('trucks.index')->with('trucks', $trucks);
}

index.blade. php

@foreach($trucks as $truck)
            <tbody>
            <tr>
                <td>{{$truck->make_id}}</td> //I need this one to show manufacturers title
                <td>{{$truck->year}}</td>
                <td>{{$truck->owner}}</td>
                <td>{{$truck->owner_number}}</td>
                <td>{{$truck->comments}}</td>
            </tr>
            </tbody>
            @endforeach

Теперь в этом представлении отображается идентификатор. Что мне нужно сделать, чтобы вместо идентификатора отображалось название производителя (Manufacturer.manufacturer)? Заранее всем спасибо!

1 Ответ

0 голосов
/ 29 мая 2020

Ваш внешний ключ для производителя в таблице Trucks не является Manufacturer_id. В этом случае вам необходимо заявить это в своих моделях:

return $this->belongsTo(Manufacturer::class, 'make_id' )

и

 return $this->hasMany(Truck::class, 'make_id' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...