Laravel eloquent 扩展模型
Laravel eloquent extending model
我有默认用户模型。现在我有另一个 table 给管理员。有没有办法从管理员模型 return 用户字段(因为管理员正在扩展用户)?我找到了这个例子,但是当 admin_id 出现在用户模型中时。我在这里有一对一的关系。
class Admin extends User
{
protected $table = 'users';
public static function boot()
{
parent::boot();
static::addGlobalScope(function ($query) {
$query->where('is_admin', true);
});
}
}
这是我找到的例子。当我的管理模型位于不同的 table.
时,我不确定如何从我的管理模型中 return 用户字段
关键是我希望能够做这样的事情(来自用户的调用方法):
Admin::first()->posts()
帖子方法不在管理员 class 上,而是在用户 class 上。
编辑:
更好地解释它。我有两个 tables,用户和管理员。它们以一对一的关系连接,所以我可以这样做:
$admin = Admin::first();
$posts = $admin->user()->posts();
但由于管理员应该拥有用户 table 的所有字段和管理员 table 的另一个字段,我正在寻找一种方法来做到这一点:
$admin = Admin::first();
$posts = $admin->posts();
我不想向用户添加管理员或其他内容 table,我仍想使用管理员 table,因为稍后我将需要更多字段。
如果两个表具有相同的 ID,请使用特征来定义您的关系:
trait UserRelationships {
public function posts() {
return $this->hasMany(Post::class, 'user_id');
}
}
class Admin {
use UserRelationships;
}
class User {
use UserRelationships;
}
您只需确保在关系中明确声明外键名称。
您还可以扩展用户模型并覆盖 $table
属性 但这可能会因各种原因出现问题,因为 User
属性存在于用户关系中而不是 Admin
模特。
我有默认用户模型。现在我有另一个 table 给管理员。有没有办法从管理员模型 return 用户字段(因为管理员正在扩展用户)?我找到了这个例子,但是当 admin_id 出现在用户模型中时。我在这里有一对一的关系。
class Admin extends User
{
protected $table = 'users';
public static function boot()
{
parent::boot();
static::addGlobalScope(function ($query) {
$query->where('is_admin', true);
});
}
}
这是我找到的例子。当我的管理模型位于不同的 table.
时,我不确定如何从我的管理模型中 return 用户字段关键是我希望能够做这样的事情(来自用户的调用方法):
Admin::first()->posts()
帖子方法不在管理员 class 上,而是在用户 class 上。
编辑:
更好地解释它。我有两个 tables,用户和管理员。它们以一对一的关系连接,所以我可以这样做:
$admin = Admin::first();
$posts = $admin->user()->posts();
但由于管理员应该拥有用户 table 的所有字段和管理员 table 的另一个字段,我正在寻找一种方法来做到这一点:
$admin = Admin::first();
$posts = $admin->posts();
我不想向用户添加管理员或其他内容 table,我仍想使用管理员 table,因为稍后我将需要更多字段。
如果两个表具有相同的 ID,请使用特征来定义您的关系:
trait UserRelationships {
public function posts() {
return $this->hasMany(Post::class, 'user_id');
}
}
class Admin {
use UserRelationships;
}
class User {
use UserRelationships;
}
您只需确保在关系中明确声明外键名称。
您还可以扩展用户模型并覆盖 $table
属性 但这可能会因各种原因出现问题,因为 User
属性存在于用户关系中而不是 Admin
模特。