首页 > 解决方案 > 此集合实例上不存在属性 [stats]

问题描述

我是 laravel 的新手,我收到了这个错误

此集合实例上不存在属性 [stats]。(查看:C:\xampp\htdocs\enginepoker2\resources\views\pages\players.blade.php)

这是在 player.blade.php

@foreach ($player_stats->stats as $player_stat)

                        <tr class="gradeX">
                        <td><a href="">{{ $player_stat->username }}</a></td>
                        <td>{{ $player_stat->country }}</td>
                        <td>{{ $player_stat->rank }}</td>
                        <td class="center"><a href="#" class="name" data-name="winpot" data-pk="{{ $player_stat->ID }}" data-type="text" data-url="{{ route('updatePlayer') }}">{{ number_format($player_stat->winpot, 2, ',', '.') }}</a></td>
                        <td class="center"><a href="#" class="name" data-name="freeGames" data-pk="{{ $player_stat->ID }}" data-type="text" data-url="{{ route('updatePlayer') }}">{{ $player_stat->freeGames }}</a></td>
                            <td class="center"><a href="#" class="name" data-name="transferLimit" data-pk="{{ $player_stat->ID }}" data-type="text" data-url="{{ route('updatePlayer') }}">{{ number_format($player_stat->transferLimit, 2, ',', '.') }}</a></td>

                        </tr>

                        @endforeach

这是在控制器中

use App\players;
use Illuminate\Http\Request;

class playerController extends Controller
{

    public function index()
    {       
        $player_stats = players::where('bot', '=', '0')->orderBy('ID', 'DESC')->limit('500')->get();
        return view('pages.players', [ 'player_stats'=>$player_stats]);

    }
}

这是在玩家模型中

namespace App;

use Illuminate\Database\Eloquent\Model;

class players extends Model
{
    protected $player = 'players';

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

}

这是在统计模型中

namespace App;

use Illuminate\Database\Eloquent\Model;

class stats extends Model
{
    protected $player = 'stats';

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

标签: phpmysqllaravel

解决方案


stats 是一个关系,默认情况下不加载关系;您应该更改控制器中的查询以加载关系。用这个:

$player_stats = players::where('bot', '=', '0')->with('stats')
->orderBy('ID', 'DESC')->limit('500')->get();

编辑:根据评论,您应该告诉 laravel 哪些列用于关系。而且这种关系是反向定义的。尝试这个:

也改变你的关系:

class players extends Model
{
    protected $player = 'players';

    public function stats()
    {
        return $this->hasMany(stats::class, 'player', 'username');
    }
}

class stats extends Model
{
    protected $player = 'stats';

    public function players()
    {
        return $this->belongsTo(players::class, 'player', 'username');
    }     
}

推荐阅读