Laravel Undefined财产

问题描述 投票:1回答:2

我试图在laravel中的foreach玩家中访问角色扮演关系,但它每次都向我抛出一个Undefined属性错误,有人可以帮助我吗?

我的代码很好,直到它涉及@if涉及 - > roleplay

@foreach ($players as $key => $player)
    <tr id="tr_player_{{ $player->id }}">
        <td>{{ $player->id }}</td>
        <td>{{ $player->username }}</td>
        <td>{{ $player->mail }}</td>
        <td>{{ $player->ip_last }}</td>
        <td>{{ Carbon\Carbon::parse($player->created_at)->diffForHumans() }}</td>
        <td>
            @if ($player->roleplay->current_working == '1')
                    Working
                @elseif ($player->roleplay->currently_jailed == '1')
                    Jailed
                @elseif ($player->roleplay->currently_dead == '1')
                    Dead
                @elseif ($player->roleplay->currently_wanted == '1')
                    Wanted
                @else
                    Alive
            @endif
        </td>
    </tr>
@endforeach

玩家类:

use Hash;
use Eloquent;
use \Illuminate\Auth\Authenticatable;
use \Illuminate\Contracts\Auth\Authenticatable as Authentication;

class Player extends Eloquent implements Authentication
{
    use Authenticatable;

    protected $primaryKey   = 'id';
    protected $table        = 'users';
    public $timestamps      = false;
    protected $fillable     = [];

    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = Hash::make($value);
    }

    public function setUsernameAttribute($value)
    {
        return $this->attributes['username'] = $value;
    }

    public function roleplay()
    {
        return $this->hasOne('App\Database\Website\User\Roleplay', 'user_id');
    }
}

角色扮演课程:

<?php
namespace App\Database\Website\User;

use Eloquent;

class Roleplay extends Eloquent
{
    protected $primaryKey   = 'user_id';
    protected $table        = 'srp_user_statistics';
    public $timestamps      = false;
    protected $fillable     = [];

    public function user()
    {
        return $this->belongsTo('App\Database\Website\User\Player', 'user_id', 'id');
    }

    public function government_role()
    {
        return $this->belongsTo('App\Database\Website\Roleplay\GovernmentRole', 'government_id');
    }
}

我是如何获得$ players系列的?

$players = Player::orderBy('id', 'desc')->get();

这是我的dd方法的结果

array:11 [▼
  0 => array:44 [▶]
  1 => array:44 [▶]
  2 => array:44 [▶]
  3 => array:44 [▶]
  4 => array:44 [▶]
  5 => array:44 [▶]
  6 => array:44 [▶]
  7 => array:44 [▶]
  8 => array:44 [▶]
  9 => array:44 [▶]
  10 => array:44 [▼
    "id" => 1
    "username" => "Liam Savage"
    "password" => "$2y$10$axynRJSDIRnRch5w5CjcV.3pTdAprjKOZNri0vniRANXPce/74DFK"
    "mail" => "[email protected]"
    "last_change" => 0
    "machine_id" => "~203c89fda517afe6d0e99494e00fe7b6"
    "updated_at" => "2016-11-14 00:30:36"
    "created_at" => "2016-07-25 03:45:44"
    "remember_token" => "hG1QZE3fPQphjPhcWeZ4ifeZYiKbJBvPIZKSL8xXkuJPXh4ukrodfMRjyvn0"
    "last_admin_login" => "Mon, Jan 30, 2017 11:43 AM"
  ]
]
php html css laravel
2个回答
1
投票

$players系列中的玩家没有角色扮演时,你会得到那个错误。如果您只想加载带有角色扮演的玩家,您可以将玩家查询更新为:

$players = Player::has('roleplay')->with('roleplay')->orderBy('id', 'desc')->get();

如果你想加载所有,那么你需要更新你的刀片视图以检查是否存在角色扮演,然后像@aimme在他的回答中所说的那样访问它。

无论哪种方式,你肯定应该懒惰加载这种关系。您最初拥有它的方式是,您在视图中遇到N + 1问题并为每个玩家运行新查询以检索其角色扮演。为了延迟加载角色扮演,请将您的查询更新为:

$players = Player::with('roleplay')->orderBy('id', 'desc')->get();

0
投票

这是因为你试图访问$ player-> roleplay的属性,而没有 - > roleplay。所以$ player-> roleplay将为null,并且您正在检查null。在尝试访问它的属性之前检查它是否存在。

@if($player->roleplay)    
 @if ($player->roleplay->current_working == '1')
    Working
 @elseif ($player->roleplay->currently_jailed == '1')
    Jailed
 @elseif ($player->roleplay->currently_dead == '1')
     Dead
 @elseif ($player->roleplay->currently_wanted == '1')
     Wanted
 @else
     Alive
 @endif
@endif

你也可以这样做

@foreach ($players as $player)

而不是这个

@foreach ($players as $key => $player)
© www.soinside.com 2019 - 2024. All rights reserved.