从父模型和子模型中获取特定字段
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
)需要明确指定,即使它已经在Post
class中指定:
public function thread()
{
return $this->belongsTo(Thread::class, 'thread_id');
}
未检索到 Thread
数据,因为您还需要 select Post
中的外键
我正在尝试检索模型实例及其相关实例,以便仅从 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
)需要明确指定,即使它已经在Post
class中指定:
public function thread()
{
return $this->belongsTo(Thread::class, 'thread_id');
}
未检索到 Thread
数据,因为您还需要 select Post