试图获取非对象的属性“类别”

时间:2019-07-05 14:17:46

标签: php laravel laravel-5.8

我试图获取要在表中显示的类别的名称,但出现错误:  “尝试获取非对象的属性'类别'(查看:C:\ xampp \ htdocs \ retro \ resources \ views \ admin \ games \ index.blade.php)!代替

这是代码表:

std::string

@foreach($games as $game) <tr> <td>{{ $game->title }}</td> <td>{{ $game->image }}</td> <td>£{{ $game->price }}</td> <td>{{ $game->category_id->category }}</td> <td>{{ $game->sold }}</td> <td>{{ $game->promote }}</td> <td> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#edit">Edit</button> </td> </tr> @endforeach 模型:

Categories

<?php namespace App; use Illuminate\Database\Eloquent\Model; class Categories extends Model { public function games() { return $this->hasMany('App\Games'); } } 模型:

Games

这是我正在使用的迁移

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Games extends Model
{
    public function category()
    {
        return $this->hasOne('App\Categories');
    }
}

我很确定这是一个关系错误,但我看不到那是什么。

2 个答案:

答案 0 :(得分:3)

您应该更改此设置:

<td>{{$game->category_id->category}}</td>

对此:

<td>{{$game->category->id}}</td>

// or if you have name property in the category table

<td>{{$game->category->name}}</td>

由于在您的Game模型中,有一个category函数将根据存储在表中的category_id返回它的关系对象。

在您的Game模型中,您可能可以改用以下关系:

public function category()
{
  return $this->belongsTo('App\Categories', 'category_id');
}

答案 1 :(得分:3)

$game->category_id将不会返回关系,就像您将其称为public function category()一样。您需要使用

<td>{{ $game->category->name }}</td>

(不确定category上您试图显示name的哪一列)

此外,请遵循Laravel约定。模型名称是单数,所以应该是

class Game extends Model { ... }

class Category extends Model { ... }

此外,如果关系无法正常工作,您可能需要提供外键:

return $this->hasOne('App\Categories', 'category_id');

我看到了另一个问题。您无法将hasManyhasOne配对;那里需要belongsToGame属于Category,而Category可以有多个Game

Games.php

class Games extends Model
{
    public function category()
    {
      return $this->belongsTo('App\Categories', 'category_id');
    }
}