【问题标题】: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

我该如何解决?谢谢

【问题讨论】:

    标签: php laravel eloquent eloquent-relationship


    【解决方案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 列和任何相关的外键列。

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多