#php #json #laravel #eloquent
#php #json #ларавель #красноречивый
Вопрос:
Я использую этот код для получения данных.
$user = User::where('active', 1)-gt;with(['spots:spot_name,spot_uid'])-gt;get();
Это отлично работает! Он получает взаимосвязь и выводит данные.
Однако данные выглядят так.
user_uid: 5 spots: {spot_name: 'backend'} description: "Test user works in helpdesk" department: "9"
Он показывает все данные, которые мне нужны, но я бы хотел, чтобы имя точки не находилось в собственном дочернем массиве json, а просто указывало имя точки как точки. Подобный этому:
spots: "backend"
Я знаю, что это потому, что он получает 2 столбца, а затем у меня есть один скрытый.
Неужели это невозможно, или я просто делаю это неправильно? Любая информация была бы великолепна.
Комментарии:
1.Что, если
spots
вернет две записи, напримерspots: [{spot_name: 'front_end'}, {spot_name: 'backend'}]
?spots
ИлиhasOne()
belongsTo()
это отношения или? Если это так, то он назван неудачно; так и должно бытьspot
. Кроме того,$user
является неправильным именем переменной для-gt;get()
, которое возвращает несколькоUser
экземпляров; рассмотрите возможность переименования в$users
.2. Извините, что эти имена были сокращены и изменены для публикации, так как они были довольно длинными. Однако он называется spots, потому что в этом примере таблица является spots, но возвращается на основе spot_uid. Таким образом, он может вернуть только один. Ваша жалоба на то, что json показывает пятна, — это то, что я хочу удалить. В этом-то и проблема. Я также хочу удалить пятна имен из исходящего json. Просто оставляю это имя 1 места.
Ответ №1:
Ты можешь это сделать
User::where('active', 1)-gt;withCount(['spots as spot_name' =gt; function ($q) { $q-gt;select('spot_name'); }]);
выход
{ ... spot_name: 'backend' }
Ответ №2:
Вы можете форматировать выходные данные с помощью коллекций:
$user-gt;map(function ($x) { $arr = $x-gt;toArray(); $arr['spots'] = $arr['spots'][0]['spot_name']; return $arr; });
А затем вышел этот пользователь.
Комментарии:
1. Этот код не будет работать. Что находится
$user
в закрытии?2. Моя вина. Исправлено @miken32
3. Спасибо! Я думаю, что это тоже должно сработать!