对多态关系的急切加载


Eager loading on polymorphic relations

class Admin {
    public function user()
    {
        return $this->morphOne('App'Models'User', 'humanable');
    }
    public function master()
    {
        return $this->hasOne('App'Models'Master');
    }
}

class Master {
    public function admin()
    {
        return $this->hasOne('App'Models'Admin');
    }
}
class User {
    public function humanable()
    {
        return $this->morphTo();
    }
    public function images()
    {
        return $this->hasOne(''App'Models'Image');
    }
}
class Image {
    public function user()
    {
        return $this->belongsTo(''App'Models'User');
    }
}

现在,如果我转储这个:

return 'App'Models'Admin::where('id',1)->with(array('user.images','master'))->first();

我得到了一个母版、一个用户和一个图像记录的完美结果。

但如果我这样做

return $user = 'App'Models'User::where('id',1)->with(array('humanable','humanable.master'))->first();

我只得到一条管理员记录,来自大师的查询 get * 甚至没有运行。

知道我做错了什么,我相信这是可能的。

如果我没记错的话,Laravel有很多陷阱。您可以尝试在管理模型中使用 protected $with var,而不是带有函数的查询生成器。

class Admin {
    protected $with = ['master'];
    public function user() {
        return $this->morphOne('App'Models'User', 'humanable');
    }
    public function master() {
        return $this->hasOne('App'Models'Master');
    }
}

在查询生成器中,只需要包含humanable .现在你应该在人类对象中看到主人。

return $user = 'App'Models'User::where('id',1)->with('humanable')->first();

希望这有帮助。