在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);
}
我不是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
错误。这令人沮丧,因为就像我说我前几天工作一样,我不确定发生了什么变化。
你可以在这里尝试几件事。首先,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
我通常也会在模型上定义逆关系,因此user
和public class User {
protected $with = ['settings', 'access'];
...
}
将定义Access
关系:
Settings