Laravel 获取 eloquent 关系抛出静态方法错误
Laravel fetching eloquent relationship throws static method error
您好,我正在使用 Laravel 4,我有三个型号,Project
(table 姓名 projects
),Status
(table 的姓名:statuses
) 和 AssignedProjectBoardStatus
(table 姓名:assigned_project_board_statuses
)。现在,当我创建项目时,如果未从列表中选择项目状态,则会自动分配状态。 assigned_project_board_statuses
table 有两个外键 table 架构如下:
id|project_id|status_id|order|created_at|updated_at
project_id
和 status_id
是外键。现在我有一个模型:
app/models/AssignedProjectBoardStatus.php
class AssignedProjectBoardStatus extends AbstractModel {
public function projects() {
return $this->belongsTo('Project');
}
public function statuses() {
return $this->belongsTo('Status');
}
}
app/models/Project.php
class Project extends AbstractModel
{
public function assignedProjectBoardStatus() {
return $this->hasMany('AssignedProjectBoardStatus');
}
app/models/Status.php
class Status extends AbstractModel {
public function assignedProjectBoardStatus() {
return $this->hasMany('AssignedProjectBoardStatus');
}
当我获取项目时,我想查看分配的状态,我会这样称呼它:
Project::assignedScrumBoardStatuses();
但是这会引发以下错误:
Non-static method Project::assignedProjectBoardStatuses() should not be called statically, assuming $this from incompatible context
所以我将函数更改如下:
app/models/Project.php
class Project extends AbstractModel
{
public **static** function assignedProjectBoardStatus() {
return $this->hasMany('AssignedProjectBoardStatus');
}
然而这会抛出以下错误:
Using $this when not in object context
所以我将函数更改如下:
public **static** function assignedScrumBoardStatuses() {
return **static::**hasMany('AssignedScrumBoardStatus');
}
然后抛出了这个错误:
Non-static method Illuminate\Database\Eloquent\Model::hasMany() should not be called statically
知道我做错了什么以及如何从模型中获取分配的状态吗?
您不能调用 Project::assignedScrumBoardStatuses()
,因为当您调用时,Project
模型不知道您要为哪条记录获取分配的 scrum 板状态。它没有上下文。
相反,找到一条记录,这样你就有了一个模型实例,然后你可以调用你的关系方法:
$project = Project::find($id)->assignedScrumBoardStatuses();
您好,我正在使用 Laravel 4,我有三个型号,Project
(table 姓名 projects
),Status
(table 的姓名:statuses
) 和 AssignedProjectBoardStatus
(table 姓名:assigned_project_board_statuses
)。现在,当我创建项目时,如果未从列表中选择项目状态,则会自动分配状态。 assigned_project_board_statuses
table 有两个外键 table 架构如下:
id|project_id|status_id|order|created_at|updated_at
project_id
和 status_id
是外键。现在我有一个模型:
app/models/AssignedProjectBoardStatus.php
class AssignedProjectBoardStatus extends AbstractModel {
public function projects() {
return $this->belongsTo('Project');
}
public function statuses() {
return $this->belongsTo('Status');
}
}
app/models/Project.php
class Project extends AbstractModel
{
public function assignedProjectBoardStatus() {
return $this->hasMany('AssignedProjectBoardStatus');
}
app/models/Status.php
class Status extends AbstractModel {
public function assignedProjectBoardStatus() {
return $this->hasMany('AssignedProjectBoardStatus');
}
当我获取项目时,我想查看分配的状态,我会这样称呼它:
Project::assignedScrumBoardStatuses();
但是这会引发以下错误:
Non-static method Project::assignedProjectBoardStatuses() should not be called statically, assuming $this from incompatible context
所以我将函数更改如下:
app/models/Project.php
class Project extends AbstractModel
{
public **static** function assignedProjectBoardStatus() {
return $this->hasMany('AssignedProjectBoardStatus');
}
然而这会抛出以下错误:
Using $this when not in object context
所以我将函数更改如下:
public **static** function assignedScrumBoardStatuses() {
return **static::**hasMany('AssignedScrumBoardStatus');
}
然后抛出了这个错误:
Non-static method Illuminate\Database\Eloquent\Model::hasMany() should not be called statically
知道我做错了什么以及如何从模型中获取分配的状态吗?
您不能调用 Project::assignedScrumBoardStatuses()
,因为当您调用时,Project
模型不知道您要为哪条记录获取分配的 scrum 板状态。它没有上下文。
相反,找到一条记录,这样你就有了一个模型实例,然后你可以调用你的关系方法:
$project = Project::find($id)->assignedScrumBoardStatuses();