我有默认的用户模型。现在,我有另一个用于管理员的表。有没有办法从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表,因为以后我将在其中需要更多字段。
答案 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
模型上。