我正在尝试在另一个表中获取记录,以获取用户表中的记录。为此我使用Laravel关系。我正在使用一对一的关系。
我到底想做什么? 我有两张桌子,
表1主键:id
表1名称:用户
表2主键:user_id
表2名称:srp_user_statistics
我想得到一条记录,事实上它将是表srp_user_statistics
中唯一的记录srp_user_statistics
列user_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)
任何人都可以帮我这个吗?
答案 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);