Laravel 6 отношений базы данных - PullRequest
1 голос
/ 02 марта 2020

Я не очень хорош в этом вопросе.

У меня есть две таблицы. Buyers and Trackers.

В таблице трекеров у меня есть эти столбцы

id, buyer_id, style_name

, а таблица покупателя

id, buyer_name

Когда я получаю и отображаю список трекеров, я хочу уметь также отображать имя_покупателя.

в моем покупателе. php модель

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tracker extends Model
{
    /**
     * The attributes that are mass assignable.
     *  
     * @var array
     */
    protected $table = 'trackers';

    protected $fillable = [
        'buyer_id',
        'style_name',
    ];

    public function buyer()
    {
        return $this->hasOne('App\Buyer');
    }
}

Я использую ремесленника, чтобы проверить. Итак, код:

$tracker = Tracker::find(1)->buyer;

но я получаю эту ошибку

Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'buyers.tracker_id' in 'where clause' (SQL: select * from `buyers` where `buyers`.`tracker_id` = 1 and `buyers`.`tracker_id` is not null limit 1)'

Он ищет tracker_id в таблице покупателей, но я только один, чтобы получить его с помощью его идентификатора. Что я делаю не так?

это файл миграции трекеров

public function up()
{
    Schema::create('pattern_room_trackers', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('buyer_id');
        $table->string('style_name');

        $table->foreign('buyer_id')
        ->references('id')
        ->on('buyers')
        ->onDelete('cascade');
    });
}

Я также не знаю, как отобразить это в виде блейда.

TrackerController. php

 public function index()
 {
   $trackers = Tracker::latest()->paginate(5);
   return view('trackers.index',compact('trackers'))
    ->with('i', (request()->input('page', 1) - 1) * 5);
  }

index.blade. php

      @foreach ($trackers as $tracker)
      <tr>
          <td>{{ ++$i }}</td>
          <td>{{ $tracker->style_name }}</td>
          <td>{{ $tracker->buyer_name }}</td>
      </tr>
       @endforeach

Спасибо.

1 Ответ

1 голос
/ 02 марта 2020

вам нужно использовать belongsTo отношения. Покупатель является родителем трекера.

public function buyer()
    {
        return $this->belongsTo('App\Buyer','buyer_id');
    }

и в клинке

<td>{{ $tracker->buyer->buyer_name }}</td>

прочитайте laravel do c здесь об обратном отношении один ко многим.

...