Laravel Eloquent / keyBy不与相关实体合作

时间:2017-12-20 15:04:21

标签: laravel laravel-5 orm laravel-4 laravel-eloquent

代码:

public function getPosts(){
    $posts = Post::with('meta','taxonomies.terms.termMeta')
            ->where('post_type','service')
            ->orderBy('post_name')
            ->get()
            ->keyBy('ID')
            ->toArray();
   return $posts;
}

问题:

KeyBy()适用于您想要更改实体(例如:帖子)键但如何更改相关实体键ex:我想使用 meta_key <关键帖子相关 /强>

screenshot

2 个答案:

答案 0 :(得分:0)

您可能需要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;
}

答案 1 :(得分:0)

代码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;
            })