如何从急切加载中指定我们想要的列
Posted
技术标签:
【中文标题】如何从急切加载中指定我们想要的列【英文标题】:How to specify columns we want from eager load 【发布时间】:2021-02-25 14:42:31 【问题描述】:我正在使用 Beyondcode/laravel-cmets (https://github.com/beyondcode/laravel-comments) 并尝试指定我想从评论员那里获得的列。这是代码:
$comment = $post->comments()->with('commentator', function ($query)
$query->select('commentator.name', 'commentator.email');
//or $query->select('users.name', 'users.email');
)->latest();
我收到错误提示
Undefined table: 7 ERROR: missing FROM-clause entry for table "commentator" // or users
我该如何解决?谢谢
【问题讨论】:
【参考方案1】:As in the documentation,只需像这样执行您的急切加载来指定列,不需要函数:
$comment = $post
->comments()
->with('commentator:id,name,email')
->latest();
如果您确实需要使用回调来改变预加载,则必须使用数组,如 in the documentation 所示:
$comment = $post
->comments()
->with([
'commentator' => fn ($q) => $q->select('id', 'name', 'email')
])
->latest();
【讨论】:
请注意,在急切加载特定列时,您应该始终运行id
('commentator:id,name,email')
。
这些代码返回 502 bad gateway,没有来自服务器的任何日志。也许我错过了什么?
@Cutis 这似乎不太可能; 502 通常是 php-FPM 的问题。
我在想也许我的包裹有问题 github.com/beyondcode/laravel-comments 我会将您的答案标记为已接受,因为它有助于我自己的 laravel 关系。非常感谢@miken32【参考方案2】:
$comment = $post->comments()->with('commentator:primary_key,your_column_name')->latest();
使用此功能时,您应该始终在要检索的列列表中包含 id 列和任何相关的外键列。
【讨论】:
请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。以上是关于如何从急切加载中指定我们想要的列的主要内容,如果未能解决你的问题,请参考以下文章