未找到列:1054 'on clause' 中的未知列 'comments.commenter_id'

Column not found: 1054 Unknown column 'comments.commenter_id' in 'on clause'

这是我的关系查询,我正在获取带有评论的数据,我也需要用户详细信息,但如果我喜欢下面的内容,我会收到上述错误。

$type = 'success';
        $status_code = 200;
        $message = 'Posts data listed.';

        $response = Post::with(['associate:id,name,avatar', 'comments:id,commenter_id,commentable_id,comment,created_at'])
            ->join('users', 'users.id', '=', 'comments.commenter_id');

        if (request()->query('search')) {
            // $response = $response->where("name", "LIKE", "%" . request()->query('search') . "%");
            $response = $response->search(request()->query('search'));
        };
        $response = $response->latest('posts.created_at')->paginate(5);

        return response_data($type, $status_code, $message, $response);

当你使用->with方法时,eloquent会在执行主查询后获取comments(意味着Post::...->join()),所以如果你想使用table 在你的查询中,那么你应该在相关查询中使用它。

所以在with方法中使用join

Post::with('associate:id,name,avatar')
->with('comments',function ($query) {
    $query
        // Now you can select from users or comments
        // e.g. ->select([...,'users.any_column_you_want'])
        ->select(['comments.id','commenter_id','commentable_id','comment','created_at'])
        ->join('users', 'users.id', '=', 'comments.commenter_id');
});

检查参考:Eager Loading and Constraining Eager Loads.

查看 mysql 连接参考以获得更好的理解:W3Schools Mysql Join