【问题标题】:Defining polymorphic relationships in Laravel with models on custom namespaces在 Laravel 中使用自定义命名空间上的模型定义多态关系
【发布时间】:2013-09-27 10:34:03
【问题描述】:

我在自定义命名空间上有 Eloquent 模型。我的意思是,例如,我的用户模型在Admin\User 中。每个用户都有一个关联的成员或管理员。这些后来的模型与用户模型位于同一命名空间:Admin\Member 和 Admin\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->user 是NULL。

还有什么我需要定义的吗?有什么我遗漏的吗?

【问题讨论】:

  • 你解决过这个问题吗?我遇到了同样的问题(使用 morphMany() 顺便说一句),虽然它应该很简单,但我被卡住了......
  • 删除命名空间声明后是否有效?
  • 实际上,$member->user 返回 null 表示没有找到与该成员关联的用户。如果找不到类,则会引发异常。
  • 我确实让它工作了,我不知道具体是怎么做的,但一定要重新迁移你的表并运行 composer dump-autoload。

标签: php orm laravel laravel-4


【解决方案1】:

对于未来的读者...

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2010-09-29
    • 2019-09-21
    相关资源
    最近更新 更多