从父模型和子模型中获取特定字段

Get specific fields from both parent and child models

我正在尝试检索模型实例及其相关实例,以便仅从 both 中检索某些字段。 This and this 问题回答了如何为 相关 模型做到这一点,它对我很有效:

$hash = \Post::whereId(1075)
                        ->with(['thread' => function($query) {
                            $query->select('id', 'title');
                        }])
                        ->first()
                        ->toArray();
print_r($hash);
Array
(
    [id] => 1075
    [title] => Blablablablam,
    [text] => Blablablablablablabl,
    [created_at] => 2015-10-17 13:00:00
    [updated_at] => 2015-10-17 13:00:00
    [thread] => Array
        (
            [id] => 180
            [title] => Blablablablam
        )
)

但是,如果我也尝试限制 Post 模型的字段,则根本不会检索 Thread 数据:

$hash = \Post::whereId(1075)
                        ->with(['thread' => function($query) {
                            $query->select('id', 'title');
                        }])
                        ->addSelect('title')
                        ->first()
                        ->toArray();
print_r($hash);
Array
(
    [title] => Blablablablam,
    [thread] => 
)

那么,如何从主模型和相关模型中仅检索某些字段?

更新

这是我看到 cresjie 的回答后对我有用的方法:

$hash = \Post::whereId(1075)
                        ->with(['thread' => function($query) {
                            $query->select('id', 'title');
                        }])
                        ->addSelect('title', 'thread_id')
                        ->first()
                        ->toArray();
print_r($hash);
Array
(
    [title] => Blablablablam,
    [thread_id] => 180,
    [thread] => Array
        (
            [id] => 180
            [title] => Blablablablam
        )
)

唯一仍然让我困惑的是外键(thread_id)需要明确指定,即使它已经在Postclass中指定:

public function thread()
{
    return $this->belongsTo(Thread::class, 'thread_id');
}

未检索到 Thread 数据,因为您还需要 select Post

中的外键