【问题标题】: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;
                  })
      

      【讨论】:

        猜你喜欢
        • 2018-02-09
        • 2015-09-17
        • 2015-07-12
        • 2017-07-18
        • 1970-01-01
        • 1970-01-01
        • 2017-07-23
        • 2018-10-30
        • 1970-01-01
        相关资源
        最近更新 更多