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();
我只收到一条管理员记录,来自主人的查询获取*甚至无法运行。
不知道我做错了什么,我确信这是可能的。
答案 0 :(得分:0)
如果我没记错,Laravel有很多陷阱。您可以尝试在Admin模型中使用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();
希望得到这个帮助。