将额外的表/数据加载到用户对象中

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

在Laravel 5.6中我正在尝试将数据加载到用户对象中,因此我可以查看用户凭据/设置等。

什么令人烦恼的是我让它工作,但由于某种原因现在它似乎停止了,我不知道我改变了什么来打破它。

无论如何,我想加载两个表,accesssettings。他们两个都有user_id场,其中有相应的user_id

在我的User.php课程中,我有两个功能:

public function access() {
    return $this->hasMany(Access::class);   
}
public function settings() {
    return $this->hasOne(Settings::class);
}

我不是qazxsw poi-在他们的顶级(i.s.qazxsw poi),如果这有任何区别。

然后Access类看起来像:

Use

而Settings类非常相似:

use \App\Access

然而,每当我尝试访问namespace App; use Illuminate\Database\Eloquent\Model; class Access extends Model { protected $table = "access"; } namespace App; use Illuminate\Database\Eloquent\Model; class Settings extends Model { protected $table = "settings"; } 时,我得到Auth::user()->settings错误。这令人沮丧,因为就像我说我前几天工作一样,我不确定发生了什么变化。

php laravel laravel-5 laravel-5.6
1个回答
1
投票

你可以在这里尝试几件事。首先,Auth::user()->access undefined index:的关系:

Lazy Eager Load

要仅在尚未加载关系时加载关系,请使用loadMissing方法

其次,在查询用户时可以使用loadMissing,尽管它与使用auth facade不相关:

// settings
Auth::user()->loadMissing('settings');
// access
Auth::user()->loadMissing('access');

最后,如果您始终希望每个with模型都返回User::with(['settings', 'access'])->where('atribute', $value)->get(); settings关系,请在access模型上设置user属性:

with

我通常也会在模型上定义逆关系,因此userpublic class User { protected $with = ['settings', 'access']; ... } 将定义Access关系:

Settings
© www.soinside.com 2019 - 2024. All rights reserved.