使用laravel的雄辩关系时出错

时间:2017-07-14 04:51:45

标签: php laravel-5.3

我在尝试使用来自雄辩关系的数据时遇到了问题。我在帖子模型中定义了一个关系。

class post extends Model
{
    //
    protected $fillable = ['title', 'contents', 'user_id', 'status'];

    public function users(){
        return $this->belongsTo('App\User');
    }

}

我正试图从我的控制器访问这种关系,如下所示:

public function showBlog(){
        $post = post ::where('status', 1)
            ->users()
            ->orderBy('id', 'desc')
            ->paginate(3);
     return  view ('blog')
            ->with('posts', $post);
    }

但是我收到了这个错误: 调用未定义的方法Illuminate \ Database \ Query \ Builder :: users()

我该如何解决这个问题?我正在使用laravel 5.3

1 个答案:

答案 0 :(得分:0)

因为关系是模型的行为,所以您获得的是查询构建器实例,因为您只是构建查询。框架仍在构建查询,并且不确定它将从中获得的结果或模型,这对于建立关系是必要的。

在访问关系之前,您需要首先生成模型Post的实例。

试试这样:

post ::where('status', 1)->first()
            ->users()
            ->orderBy('id', 'desc')
            ->paginate(3);

此处方法first()将首先为post ::where('status', 1)运行查询Post,并为您获取第一个结果模型,然后将在此模型实例上执行其余查询。 / p>

但是,此查询只会导致第一个结果发布的用户。如果您希望获得与用户关系的所有帖子,请尝试使用with,如:

post::where('status', 1)->with('users')
            ->orderBy('id', 'desc')
            ->paginate(3); 

这会导致帖子用户的分页结果。

希望它会有所帮助。