2016-09-26 4 views
1

У меня есть эта очень простая линия:Eloquent - изменить обратный формат

$user["emails"] = $user->emails()->get(array('email')); 

Когда вернулся в JSON это дает массив объектов

0 : {email: "[email protected]", pivot: {user_id: "1", email_id: "1", confirm: "1"}}, 
1 : {email: "[email protected]", pivot: {user_id: "1", email_id: "2", confirm: "0"}}, 
2 : {email: "[email protected]", pivot: {user_id: "1", email_id: "3", confirm: "0"}} 

При необходимости, пользователь-сообщения электронной почты() функции:

return $this->belongsToMany('App\Email', 'user_email')->withPivot('confirm'); 

Я бы хотел, чтобы возвращаемые данные были проще. Нравится так:

0 : "[email protected]", 
1 : "[email protected]", 
2 : "[email protected]" 

Спасибо заранее!

ответ

2

Метод, который вы ищете, это pluck().

$user['emails'] = $user->emails()->pluck('email'); 

Это вернет массив писем так, как вы просили. Вы можете найти информацию об этом в подразделе «Получение списка значений столбцов» в https://laravel.com/docs/5.3/queries#retrieving-results

+0

При попытке вашего решения отправляется только первое электронное письмо. Нет массива, только «[email protected]» –

+2

В соответствии с документацией это вернет массив столбца электронной почты для всех возвращенных результатов. – ollieread

+1

'pluck()' будет возвращать коллекцию, если вам нужен массив '-> pluck ('email') -> all()'. См. Http://devdocs.io/laravel~5.3/api/5.3/illuminate/database/eloquent/builder#method_pluck для получения дополнительной информации. – Robert

Смежные вопросы