未找到列: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
语句,因为现有两个表(users
和comments
)所以选择哪个表ID 不明确。所以我将id
更改为comments.id
(答案已更新)。以上是关于未找到列:1054“on 子句”中的未知列“comments.commenter_id”的主要内容,如果未能解决你的问题,请参考以下文章
未找到列:Laravel 5 多对多关系查询中“on 子句”中的 1054 未知列“managers.id”
MySQL错误1054未知列'persons.PersonID' in on子句[重复]