渴望加载多态关系

时间:2015-03-29 18:49:26

标签: php laravel-4 laravel-5

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();

我只收到一条管理员记录,来自主人的查询获取*甚至无法运行。

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

1 个答案:

答案 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();

希望得到这个帮助。