使用自定义命名空间上的模型定义Laravel中的多态关系

时间:2013-09-22 12:32:33

标签: php orm laravel laravel-4

我在自定义命名空间上有Eloquent模型。我的意思是,例如,我的用户模型位于Admin\User。每个用户都有一个与其关联的成员或管理员。这些后来的模型与用户模型位于同一名称空间:Admin\MemberAdmin\Admin

我已将关系定义如下

namespace Admin;
use Illuminate\Database\Eloquent\Model as Eloquent;

class User extends Eloquent
{
    public function model()
    {
        return $this->morphTo();
    }
}

class Admin extends Eloquent
{
    public function user()
    {
        return $this->morphOne('Admin\User', 'model');
    }
}

class Member extends Eloquent
{
    public function user()
    {
        return $this->morphOne('Admin\User', 'model');
    }
}

我的问题是,当我这样做时:

$member = Member::find($id);

$member->userNULL

我还需要定义什么?有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

对于未来的读者......

我在使用命名空间模型之前遇到过这个问题。通过多态关系,Laravel将XXX-able_id和XXX-able_type存储在表中。 XXX-able_type通常是模型的完全限定名称,而不仅仅是类名。因此,在这种情况下,您需要检查该列中的值是否确实为Admin\User,而不仅仅是User

在您的情况下,重新移动只会导致模型插入其完全限定名称,而不仅仅是类名。

希望这有帮助。