Php Laravel 5:SQLSTATE[42S22]:未找到列:1054未知列“用户.版主”

Php Laravel 5:SQLSTATE[42S22]:未找到列:1054未知列“用户.版主”,php,laravel,model,laravel-5,eloquent,Php,Laravel,Model,Laravel 5,Eloquent,我猜这是一个模型关系错误,但我似乎无法确定 我有四张桌子 users: id, name, email... subreddits: id, user_id... posts: id, title, subreddit_id, user_id... moderators: id, user_id, subreddit_id... 我正试图通过“用户投票”和“subreddit.版主”获得所有帖子 $post = Post::with('user.votes')->with('subred

我猜这是一个模型关系错误,但我似乎无法确定

我有四张桌子

users: id, name, email...
subreddits: id, user_id...
posts: id, title, subreddit_id, user_id...
moderators: id, user_id, subreddit_id...
我正试图通过“用户投票”和“subreddit.版主”获得所有帖子

$post = Post::with('user.votes')->with('subreddit.moderators')->findOrFail($post->id);
但我总是犯这个错误

Connection.php第636行中的QueryException:

SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“users.moderators”SQL:select*from users where users.moderators in 17

如果我单独用subreddit加载它,它会工作,但我也需要找到subreddit的版主

编辑:我从Subreddit模型中的版主方法中删除了版主字段,并将App\User替换为App\版主,现在我可以获得有问题的Subreddit及其版主。但是,access$post->subreddit->版主->用户id为我提供了未定义的错误属性:Illumb\Database\Eloquent\Collection::$user\u id

这些是我的模型

用户模型

亚Reddit模型

后模型

慢化剂模型

投票模式

AuthServiceProvider中的门授权


如果要收集所有版主的用户ID,请使用以下命令:

$ids=Post::findOrFail$id->subreddit->版主->列出“用户id”; 如果要检查给定用户是否是子Reddit上的版主,请使用以下命令:

$subreddit=Post::findOrFail$id->subreddit; $isModerator=$subreddit->版主->其中的'user\u id',$user->id->存在;
您的用户模型中是否有版主列?我在用户模型中有版主方法,返回$this->hasManyThrough'App\mediator'、'App\Subreddit';是的,但是Subreddit模型中的版主函数在用户模型上查找版主键,您将版主指定为第二个参数,这是我看到的外键。不,我的数据库中没有任何版主字段。我应该删除它并使用App\版主而不是App\User吗?@crowd我已经更新了我的原始帖子,请看一看。非常感谢。我没有得到任何好的错误。但我使用id检查用户是否是属于子Reddit的版主,如果$user->id===$ids,但这似乎不起作用,我无法在我作为版主的子Reddits中编辑。@Halnex-很明显,您没有具有指定id的帖子。在post::findOrFail$id中,$id来自哪里?方法注入,还是路由模型绑定?如果你只是为Post输入提示,你会得到一个$id为null的空Post模型。如果你已经有了它,为什么还要重新加载Post呢$subreddit=$post->subreddit;
public function subreddit() {
    return $this->hasMany('App\Subreddit');
}

public function posts() {
    return $this->hasMany('App\Post');
}

public function votes(){
    return $this->hasManyThrough('App\Vote','App\Post');
}

public function moderators(){
    return $this->hasManyThrough('App\Moderator', 'App\Subreddit');
}
public function user() {
    return $this->belongsTo('App\User');
}

public function posts() {
    return $this->hasMany('App\Post');
}

public function moderators() {
    return $this->hasMany('App\User', 'moderators');
}
public function user() {
    return $this->belongsTo('App\User');
}
public function subreddit() {
    return $this->belongsTo('App\Subreddit');
}

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

public function posts() {
    return $this->belongsTo('App\Post');
}
public function subreddit() {
    return $this->belongsTo('App\Subreddit');
}

public function votes() {
    return $this->hasMany('App\Vote');
}

public function moderators() {
    return $this->hasMany('App\Moderator');
}
public function user() {
    return $this->belongsTo('App\User');
}

public function posts() {
    return $this->belongsTo('App\Post');
}
$gate->define('update-post', function ($user, $post, $isModerator) {
        // Check if user is subreddit owner
        if ($user->id === $post->subreddit->user->id) {
            return true;
        }

        // Check if user is the post author
        if ($user->id === $post->user_id) {
            return true;
        }

        // Check if user is a moderator of a subreddit
        if ($isModerator) {
            return true;
        }

        return false;
});