You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.6中使用with()关联查询时如何仅选择所需字段?

解决Laravel 5.6关联查询仅选择指定字段的问题

这事儿好办!在Laravel里要实现你要的指定字段查询,核心就是在主模型和关联模型里分别指定需要的字段,但有个关键细节不能忘:必须包含关联所需的键,不然关联关系会失效。

直接上修改后的代码,两种写法都给你:

写法一:闭包方式(更灵活,适合复杂关联逻辑)

foreach(Book::select('book_name', 'book_description', 'author_id')
    ->with(['author' => function($query) {
        $query->select('id', 'author_name');
    }])->get() as $book) {
    echo $book->author->author_name;
}

写法二:简洁写法(Laravel 5.5+支持)

foreach(Book::with('author:id,author_name')
    ->select('book_name', 'book_description', 'author_id')
    ->get() as $book) {
    echo $book->author->author_name;
}

关键细节解释

为什么要多写author_id(Book表)和id(Author表)?

  • Laravel需要通过books.author_id和authors.id这两个字段来匹配对应的书和作者,如果没选这两个字段,框架没法建立关联,你会发现$book->author变成null。
  • 加上这两个必要字段后,生成的SQL就完全符合你的需求了:
    1. select book_name, book_description, author_id from books
    2. select id, author_name from authors where id in (1, 2, 3, ...)

这样既实现了只查需要的字段,又保证了关联关系正常工作~

内容的提问来源于stack exchange,提问作者Mȍhǟmmǟd Șamȋm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:35:00