【问题标题】:Laravel fetching eloquent relationship throws static method errorLaravel 获取 eloquent 关系抛出静态方法错误
【发布时间】:2015-07-25 14:23:52
【问题描述】:

您好,我正在使用 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】:

    您不能调用 Project::assignedScrumBoardStatuses(),因为当您调用时,Project 模型不知道您尝试获取分配的 Scrum 板状态的记录。它没有上下文。

    相反,找到一条记录,以便您拥有一个模型实例,然后您可以在其上调用您的关系方法:

    $project = Project::find($id)->assignedScrumBoardStatuses();
    

    【讨论】:

    • 啊,我明白了,不过我现在收到了这个错误:Object of class Illuminate\Database\Eloquent\Relations\HasMany could not be converted to string?
    • @001221 你能用assignedScrumBoardStatuses()目前的样子更新你的问题吗?
    • 您可能尝试输出分配的ScrumBoardStatuses。从assignedScrumBoardStatuses 中删除括号(),以便Laravel 自动调用hasMany 关系上的->get()。这会产生一个集合。
    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2019-07-09
    • 2013-12-14
    • 2017-01-12
    • 2017-05-01
    • 1970-01-01
    相关资源
    最近更新 更多