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


Defining polymorphic relationships in Laravel with models on custom namespaces

我在自定义命名空间上有雄辩的模型。我的意思是,例如,我的用户模型在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.

还有什么需要定义的吗?我错过了什么吗?

对于未来的读者...

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

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

希望这有帮助。