\App\Post :
function PostMeta(){
return $this->hasMany('App\PostMeta');
}
And my Query : ( pluck is not working) -
I need to use less database queries
$query = \App\Post
::with(array('PostMeta'=>function($query){
$query->pluck('key','value');
}));
$query->get();
I need to get title_en , But I cant use pluck here!
solved:
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');
}
You can't do this while eager loading the data, but you can use collection method with the same name pluck() in the view when accessing the relation data:
{{ $post->postMeta->pluck('value', 'key') }}
In this case, you'll avoid N+1 problem and get data in the format you want.
Update
Since you want to prepare data for Vue, here's a small example of how you could iterate over the collection:
foreach ($posts as $post) {
$post->meta = $post->postMeta->pluck('value', 'key');
unset($post->postMeta);
}