Laravel::with 指定列时不拉取关系

Laravel::with doesn't pull the relationship when columns are specified

我想得到一个评论,它的 ID 属于 post。

Route::get('/', function () {
  $post = Post::with([
    'comment' => fn ($query) => $query->select('id')
  ])->find(1);
  return $post;
});

然而,comment 响应为空。

{
    "id": 1,
    "title": "Alias iste quo tempore quis totam maxime. Illo fuga qui modi ut quae. Nobis eum soluta quas.",
    "body": "Officiis id earum suscipit magnam reiciendis alias fugiat. Deserunt rerum in tempora odit nobis. Sunt similique accusamus suscipit aliquam quia. Sunt harum rem incidunt rerum id nesciunt. Reiciendis rerum placeat sed dolores temporibus ducimus autem. Quidem ullam ut ut voluptatum ea. Et magni aut ut animi ea cupiditate eum. Ut similique consequuntur et enim officiis nobis. Occaecati nostrum sint labore sint quia. Reprehenderit veritatis qui provident eum reprehenderit commodi.",
    "created_at": "2022-05-12T10:39:12.000000Z",
    "updated_at": "2022-05-12T10:39:12.000000Z",
    "comment": null
}

当我删除 select 方法时,我确实收到了评论,

Route::get('/', function () {
  $post = Post::with('comment')->find(1);
  return $post;
});
{
    "id": 1,
    "title": "Alias iste quo tempore quis totam maxime. Illo fuga qui modi ut quae. Nobis eum soluta quas.",
    "body": "Officiis id earum suscipit magnam reiciendis alias fugiat. Deserunt rerum in tempora odit nobis. Sunt similique accusamus suscipit aliquam quia. Sunt harum rem incidunt rerum id nesciunt. Reiciendis rerum placeat sed dolores temporibus ducimus autem. Quidem ullam ut ut voluptatum ea. Et magni aut ut animi ea cupiditate eum. Ut similique consequuntur et enim officiis nobis. Occaecati nostrum sint labore sint quia. Reprehenderit veritatis qui provident eum reprehenderit commodi.",
    "created_at": "2022-05-12T10:39:12.000000Z",
    "updated_at": "2022-05-12T10:39:12.000000Z",
    "comment": {
        "id": 1,
        "post_id": 1,
        "comment": "Exercitationem voluptatibus eos velit consequatur aut voluptatem voluptas. Sed et magnam omnis nesciunt dignissimos rerum enim. Accusamus ipsa non aspernatur iure architecto.",
        "created_at": "2022-05-12T10:39:13.000000Z",
        "updated_at": "2022-05-12T10:39:13.000000Z"
    }
}

Post.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
  use HasFactory;

  public function comment()
  {
    return $this->hasOne(Comment::class);
  }
}

我做错了什么?

预加载需要定义外键

https://laravel.com/docs/9.x/eloquent-relationships#eager-loading-specific-columns

 Route::get('/', function () {
  $post = Post::with([
    'comment' => fn ($query) => $query->select('id','post_id')
  ])->find(1);
  return $post;
});