2017-04-23 31 views
1

Query Outputlaravel使用(),摘去()一起

\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

你不能做到這一點,而急於加載數據,但你可以訪問視圖中的關係數據時使用的收集方法具有相同的名稱pluck()

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

在這種情況下,您將避免N + 1問題並以您想要的格式獲取數據。

更新

由於要準備Vue的數據,這裏是你如何可以遍歷集合的一個小例子:

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

@danialdezfooli你可以遍歷或使用'地圖() '在一系列帖子上添加新的'Post'屬性並使用'$ post-> postMeta-> pluck('value','key')'爲其構建'key => value'列表。 –

+0

請檢查更新...謝謝:) –

+0

@danialdezfooli請檢查我的答案的更新部分,如果你需要一個小例子。 –