Laravel雄辩的扩展模型

时间:2018-08-31 19:30:23

标签: php mysql laravel relational-database

我有默认的用户模型。现在,我有另一个用于管理员的表。有没有办法从admin模型返回用户字段(因为admin正在扩展用户)?我找到了这个示例,但是当用户模型中存在admin_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类上,而在用户类上。

编辑:

为了更好地解释它。我有两个表,用户和管理员。它们以一对一的关系连接,所以我可以做这样的事情:

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

但是由于Admin应该具有users表中的所有字段,而admins表中又有一个字段,因此我正在寻找一种方法:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

class Admin {
    use UserRelationships;
}

class User {
    use UserRelationships;
}

您只需要确保在关系中显式声明外键名称即可。

您还可以扩展用户模型并覆盖$table属性,但这可能由于各种原因而出现问题,因为User属性存在于用户关系而非Admin模型上。