laravel与(),pluck()一起使用

时间:2017-04-23 11:10:06

标签: php laravel

Query Output

\App\Post

function PostMeta(){
    return $this->hasMany('App\PostMeta');
}

我的查询:(采摘不起作用) -

  

我需要使用较少的数据库查询

$query = \App\Post
      ::with(array('PostMeta'=>function($query){
          $query->pluck('key','value');
      }));
       $query->get();

我需要title_en,但我不能在这里使用!

新更新

解决:

function get_PostMeta(){
      // print_r($this->relations['PostMeta']);
      return $this->relations['PostMeta'];
    }


$query = \App\Post::with('PostMeta')->get();
      foreach ($query as $key => $post){
        $post->meta = $post->get_PostMeta()->pluck('value', 'key');
      }

1 个答案:

答案 0 :(得分:2)

您无法在加载数据时执行此操作,但在访问关系数据时,您可以在视图中使用名称为pluck()的收集方法:

{{ $post->postMeta->pluck('value', 'key') }}

在这种情况下,您将避免出现N + 1问题,并以您想要的格式获取数据。

<强>更新

由于您想为Vue准备数据,这里有一个关于如何迭代集合的小例子:

foreach ($posts as $post) {
    $post->meta = $post->postMeta->pluck('value', 'key');
    unset($post->postMeta);
}