laravel雄辩扩展模型

qcuzuvrc  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(344)

我有默认的用户模型。现在我有了另一张管理员桌。有没有办法从管理模型返回用户字段(因为管理员正在扩展用户)?我找到了这个示例,但它是在用户模型中存在admin\u id时出现的。我这里有一对一的关系。

class Admin extends User
{
    protected $table = 'users';

    public static function boot()
    {
        parent::boot();

        static::addGlobalScope(function ($query) {
            $query->where('is_admin', true);
        });
    }
}

这就是我发现的例子。我不知道如何才能从我的管理模型返回用户字段时,它在不同的表。
关键是我希望能够这样做(从用户调用方法):

Admin::first()->posts()

其中posts方法不在admin类上,而是在user类上。
编辑:
为了更好的解释。我有两个表,用户和管理员。他们是一对一的关系,所以我可以这样做:

$admin = Admin::first();
$posts = $admin->user()->posts();

但由于admin应该有users表中的所有字段和admins表中的另一个字段,所以我正在寻找一种方法:

$admin = Admin::first();
$posts = $admin->posts();

我不想在users表中添加admin或其他内容,我仍然想使用admins表,因为我以后需要更多的字段。

lg40wkob

lg40wkob1#

如果两个表的id相同,请使用特征来定义关系:

trait UserRelationships {
    public function posts() {
         return $this->hasMany(Post::class, 'user_id');
    }
}

class Admin {
    use UserRelationships;
}

class User {
    use UserRelationships;
}

您只需确保显式声明关系中的外键名称。
您还可以扩展用户模型并覆盖 $table 但由于各种原因,这可能会带来问题 User 属性存在于用户关系上,而不存在于 Admin 模型。

相关问题