我试图获取要在表中显示的类别的名称,但出现错误: “尝试获取非对象的属性'类别'(查看: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');
}
}
我很确定这是一个关系错误,但我看不到那是什么。
答案 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');
我看到了另一个问题。您无法将hasMany
与hasOne
配对;那里需要belongsTo
。 Game
属于Category
,而Category
可以有多个Game
:
Games.php
class Games extends Model
{
public function category()
{
return $this->belongsTo('App\Categories', 'category_id');
}
}