未找到列:1054“on 子句”中的未知列“comments.commenter_id”

Posted

技术标签:

【中文标题】未找到列:1054“on 子句”中的未知列“comments.commenter_id”【英文标题】:Column not found: 1054 Unknown column 'comments.commenter_id' in 'on clause' 【发布时间】:2022-01-14 21:52:42 【问题描述】:

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

$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);

【问题讨论】:

问题不在于你的代码,你的 cmets 表列是什么?该表中没有 commenter_id。 这不是真的,commenter_id 列在那里,但是当我通过上述错误将 cmets 表与用户一起加入时。 添加属于评论模型中与用户的关系,然后在查询中传递它 请提供错误中包含的完整查询 【参考方案1】:

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

所以在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 和 Constraining Eager Loads。

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

【讨论】:

"调用模型 [App\\Models\\Post] 上的未定义关系 [post]。", 抱歉,这个错误是由于我分心造成的(我输错了posts 而不是comments),我已修复(答案已更新)。 我按照您的要求进行了尝试,但我得到了“违反完整性约束:字段列表中的 1052 列 'id' 不明确” 它属于您的select 语句,因为现有两个表(userscomments)所以选择哪个表ID 不明确。所以我将id 更改为comments.id(答案已更新)。

以上是关于未找到列:1054“on 子句”中的未知列“comments.commenter_id”的主要内容,如果未能解决你的问题,请参考以下文章

未找到列:Laravel 5 多对多关系查询中“on 子句”中的 1054 未知列“managers.id”

#1054 - “on 子句”中的未知列

MySQL错误1054未知列'persons.PersonID' in on子句[重复]

未找到列:1054 laravel 4 中的未知问题

未找到列:1054“where 子句”中的未知列“MONTH(date)”[重复]

SQLSTATE [42S22]:未找到列:1054 laravel 4 中“字段列表”中的未知列“id”