Laravel:一对一的关系不起作用?

时间:2017-03-27 05:30:36

标签: php mysql database laravel relationship

我正在尝试在另一个表中获取记录,以获取用户表中的记录。为此我使用Laravel关系。我正在使用一对一的关系。

我到底想做什么? 我有两张桌子,

表1主键:id
表1名称:用户

表2主键:user_id
表2名称:srp_user_statistics

我想得到一条记录,事实上它将是表srp_user_statistics中唯一的记录srp_user_statisticsuser_id等于表users列{{{1}的值1}}


在mySQL查询方式中:

id


我试图尽可能以最好的方式解释,希望我有,因为以前的人都不明白我想做什么,因此给出了错误的答案。

我想在TABLE2中获取TABLE,其中TABLE2.user_id = TABLE1.id,所以在这种情况下我想获取srp_user_statistics中的记录WHERE srp_user_statistics.user_id = users.id value

我使用了laravel 5.4,这是我使用的代码。


我为SELECT * FROM `srp_user_statistics` WHERE `user_id` = '" . Auth::user()->id . "' 表使用了Player.php类:

users



然后我使用Roleplay.php类作为namespace App\Database\Frontend\User; 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\Frontend\User\Roleplay', 'user_id'); } }

srp_user_statistics

那怎么不工作?
我尝试通过执行namespace App\Database\Frontend\User; use Eloquent; class Roleplay extends Eloquent { protected $primaryKey = 'user_id'; protected $table = 'srp_user_statistics'; public $timestamps = true; protected $fillable = []; public function user() { return $this->belongsTo('App\Database\Frontend\User\Player', 'user_id', 'id'); } public function government_role() { return $this->belongsTo('App\Database\Frontend\Roleplay\GovernmentRole', 'government_id'); } } 来回显表srp_user_statistics中的列,它向我发送了此错误

{{ Auth::user()->roleplay->my_column }}

我很确定数据库端存在记录,因为此代码完美运行:

ErrorException in 9d107b63496020763dd451d002bc2c1a2b2459c0.php line 3:
Trying to get property of non-object (View: C:\cms_r\resources\views\frontend\home.blade.php)


任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

仔细检查您的关系定义。

class Player extends Eloquent implements Authentication
{
    public function roleplay()
    {
        // $this->hasOne('namespace\class', 'foreign_key', 'local_key')
        return $this->hasOne('App\Database\Frontend\User\Roleplay', 'user_id', 'id');
    }
}

class Roleplay extends Eloquent 
{
    public function user()
    {
        // $this->hasOne('namespace\class', 'foreign_key', 'local_key')
        return $this->belongsTo('App\Database\Frontend\User\Player', 'id', 'user_id');
    }
}

有关详细信息,请参阅文档。 https://laravel.com/docs/5.4/eloquent-relationships#defining-relationships

最后,检查您是否确实已定义相关数据。

dd(Auth::user()->roleplay);