0

在 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()->accessundefined index:

4

1 回答 1

1

您可以在这里尝试一些事情。首先,Lazy Eager通过以下方式加载关系loadMissing

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

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

其次,您可以with在查询用户时使用,尽管它与使用 auth 门面无关:

User::with(['settings', 'access'])->where('atribute', $value)->get();

最后,如果您总是希望每个模型始终返回settingsand关系,请在模型上设置属性:accessuserwithuser

public class User {
    protected $with = ['settings', 'access'];
    ...
}

我通常也会在模型上定义逆关系,因此Access并且SettingsBelongsTo定义一个关系:

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);
    }
}
于 2018-03-02T09:35:04.700 回答