在Laravel 5.6中,我正在尝试将数据加载到用户对象中,因此我可以查看用户凭据/设置等。
令人讨厌的是我有它工作,但由于某种原因现在它似乎停止了,我不知道我改变了什么来打破它。
无论如何,我想加载两个表,access
和settings
。它们都有user_id
字段,其中包含相应的user_id
。
在我的User.php
课程中,我有两个功能:
public function access() {
return $this->hasMany(Access::class);
}
public function settings() {
return $this->hasOne(Settings::class);
}
我不 Use
- 将它们放在班级的顶部(即use \App\Access
),如果这有任何区别的话。
然后Access类看起来像:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Access extends Model
{
protected $table = "access";
}
Settings类非常相似:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Settings extends Model
{
protected $table = "settings";
}
但是,每当我尝试访问Auth::user()->settings
或Auth::user()->access
时,我都会收到undefined index:
错误。这令人沮丧,因为我说我前几天工作了,而且我不确定发生了什么变化。
答案 0 :(得分:1)
你可以在这里尝试几件事。首先,loadMissing
之间的Lazy Eager Load关系:
// settings
Auth::user()->loadMissing('settings');
// access
Auth::user()->loadMissing('access');
要仅在尚未加载关系时加载关系,请使用loadMissing方法
其次,您可以在查询用户时使用with
,尽管它与使用auth facade不相关:
User::with(['settings', 'access'])->where('atribute', $value)->get();
最后,如果您始终希望始终与每个settings
模型一起返回access
和user
关系,请在with
上设置user
属性模型:
public class User {
protected $with = ['settings', 'access'];
...
}
我通常也会在模型上定义反比关系,因此Access
和Settings
会定义BelongsTo
关系:
class Access extends Model
{
protected $table = "access";
public function user() {
return $this->belongsTo(User::class);
}
}
class Settings extends Model
{
protected $table = "settings";
public function user() {
return $this->belongsTo(User::class);
}
}