【问题标题】:Laravel Eloquent / keyBy doesn't work with related entityLaravel Eloquent / keyBy 不适用于相关实体
【发布时间】:2018-06-03 04:26:37
【问题描述】:
代码:
public function getPosts(){
$posts = Post::with('meta','taxonomies.terms.termMeta')
->where('post_type','service')
->orderBy('post_name')
->get()
->keyBy('ID')
->toArray();
return $posts;
}
问题:
KeyBy() 在您想更改实体(例如:发布)键但如何更改相关实体键例如:我想用 meta_keymeta 相关的帖子时起作用/strong>。
screenshot
【问题讨论】:
标签:
laravel
laravel-5
orm
laravel-4
laravel-eloquent
【解决方案1】:
你可能需要transform()每个帖子并调用keyBy()方法。
public function getPosts(){
$posts = Post::with('meta','taxonomies.terms.termMeta')
->where('post_type','service')
->orderBy('post_name')
->get()
->transform(function ($post) {
$meta = $post->meta;
$post->meta = $meta->keyBy('meta_key');
return $post;
})
->keyBy('ID')
->toArray();
return $posts;
}
【解决方案2】:
代码 1:不起作用,我注意到您可以更改 $post 但不能更改相关实体(例如:meta):
->transform(function ($post) {
$meta = $post->meta;
$post->meta = $meta->keyBy('meta_key');
return $post;
})
代码 2:有效,但它只返回没有发布信息的元数组
->transform(function ($post) {
$meta = $post->meta;
$post->meta = $meta->keyBy('meta_key');
return $post->meta;
})