Модели Laravel и их совместное отображение - PullRequest
0 голосов
/ 05 октября 2019

Для школьного задания у нас есть две таблицы и модели игроков и стран, которые я знаю, это либо мои модели, либо мой контроллер (у меня раньше была эта проблема, но в другом задании у них была только одна страна, поэтому я просто перебрал переменную страныи использовал вместо этого массивы, но это не будет работать для нескольких стран)

Когда я пытаюсь отобразить в представлении, я получаю «Попытка получить свойство не-объекта« имя »в {{$ player-> country-> name}} и именно так учитель прямо сказал, что мы должны его отобразить.

В настоящее время перед чем-либо еще хотелось бы отобразить имена всех моих игроков и названия их стран
Models

class Country extends Model
{
    //
    protected $table = 'countries';
    protected $fillable=['name','flag'];
    public function player(){
        return $this->hasMany(Player::class);
    }
}


class Player extends Model
{
    //
    protected $fillable =['name','age','role','batting','bowling','image','odiRuns','countries_id'];
    public function country()
    {
        return $this->belongsTo(Country::class);
    }
}


Таблицы

public function up()
    {
        Schema::create('countries', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('flag');
            $table->timestamps();
        });
    }


public function up()
    {
        Schema::create('players', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->integer('age');
            $table->string('role');
            $table->string('batting');
            $table->string('bowling');
            $table->string('image');
            $table->string('odiRuns');
            $table->integer('countries_id')->unsigned();
            $table->foreign('countries_id')->references('id')->on('countries');
            $table->timestamps();
         });
    }

Контроллер

use App\Player;
use App\Country;
use Illuminate\Http\Request;

class PlayerController extends Controller
{
 public function index()
    {
        //
        $players=Player::all();

        return view('index',compact('players'));
    }


Просмотр

@extends('layout')
@section('content')

    @foreach ($players as $player )
    {{$player->name}}
    {{$player->age}}
    {{$player->role}}
    {{$player->batting}}
    {{$player->bowling}}
    {{$player->odiRuns}}
    {{$player->country->name}}
    @endforeach
    @endsection

Редактировать все игроки имеют идентификаторы страныотносящиеся к столам стран столы стол для игроков

cстол страны

1 Ответ

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

Проблема в том, что у вас отсутствует внешний ключ в отношении. Когда вы определяете отношение, если вы явно не указываете, какой внешний ключ использовать для отношения, Laravel ищет внешний ключ, такой как relationname_primarykeyoftheparenttable. В вашем случае это country_id, но в вашей таблице игроков имя столбца countries_id. Таким образом, отношения не строятся, и вы получаете ошибку. Измените имя столбца или укажите отношение, какой внешний ключ использовать для построения отношения.

class Player extends Model
{
    protected $fillable =['name','age','role','batting','bowling','image','odiRuns','countries_id'];

    public function country()
    {
        return $this->belongsTo(Country::class,'countries_id');
    }
}

Laravel Doc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...