Laravel获取雄辩的关系会引发静态方法错误

问题描述 投票:1回答:1

嗨,我正在使用Laravel 4,我有三个模型,Project(表名projects),Status(表名:statuses)和AssignedProjectBoardStatus(表名:assigned_project_board_statuses)。现在,当我创建项目时,如果未从列表中选择状态,则会自动分配状态。 assigned_project_board_statuses表有两个外键,表模式如下:

id|project_id|status_id|order|created_at|updated_at

project_idstatus_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

任何想法我做错了什么以及如何从模型中获得指定的状态?

php laravel-4 eloquent relationships
1个回答
2
投票

你不能调用Project::assignedScrumBoardStatuses(),因为当你这样做时,Project模型不知道你试图获取指定的scrum board状态的记录。它没有背景。

相反,找到一个记录,以便你有一个模型实例,然后你可以调用你的关系方法:

$project = Project::find($id)->assignedScrumBoardStatuses();
© www.soinside.com 2019 - 2024. All rights reserved.