Laravel Eloquent / keyBy不适用于相关实体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Eloquent / keyBy不适用于相关实体相关的知识,希望对你有一定的参考价值。

码:

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

答案

您可能需要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:不起作用,我注意到你可以改变$ 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;
            })

以上是关于Laravel Eloquent / keyBy不适用于相关实体的主要内容,如果未能解决你的问题,请参考以下文章

使用 keyby 收集方法检索 eloquent api 资源

带有 keyBy 的 Laravel 响应返回对象而不是数组

keyBy() 不会更改键。拉拉维尔 5.5

Laravel/Eloquent belongsToMany - Eloquent 构建器实例上不存在属性 [人]

Laravel 8:方法 Illuminate\Database\Eloquent\Collection::latest 不存在

Laravel (Eloquent) 不更新数据库